Use consistent data types as you have some long-type and some short. Typically, short data types are used (e.g. int, string, etc.)
Validating if a path is valid can be done as part of parameter validation. Take a look at this Simplify Your PowerShell Script with Parameter Validation. The example is testing a registry path, but you can do the same for a passed unc or standard path.
Wrap your Import-Module with a try\catch or use some logic with Get-Module to verify that the module is available because your function won't work without it.
You don't need Write-Output and it's typically bad practice to use it. The return keyword is also unnecessary.
A lot of your code is recreating the properties or objects over and over when you are only changing status. Try setting the status in a variable and then create the object once like in the example below:
Another note is your first try should be wrapped around your other try\catches for the folders because if your Get-ChildItem fails, the variable would be null and your loop would fail
I would move a lot of the content inside the foreach folders into its own function (Move-SingleFolder, but not the batch stuff).
Also I would use a for loop in this case, instead of a foreach
I would consider using write-error, or adding [bool]Success to the output object,