我在用于管理用户帐户的PowerShell脚本问题上有几个层面。当用户在不同位置之间移动时,我们会将其ADUser移动到新的OU,并在服务器之间移动数据。
在研究如何复制其主文件夹时,确定没有简单的方法使用PowerShell复制文件并排除某些目录。因此,我们调用robocopy.exe并使用/ XD。这也让我们可以启动副本,但让脚本继续下一个用户。
我们正在尝试通过移动或删除旧文件夹来增强我们的脚本,具体取决于用户类型。我创建了一个我想调用的PS1文件,以便脚本可以立即继续下一个用户,而不是等待副本完成。 PS1文件如下所示:
Param(
[string]$source,
[string]$destination,
[string]$oldStaff
)
robocopy $source $destination
move $source $oldStaff
当我尝试通过以下方式从我们的脚本中调用它时:
start powershell.exe .\Move-WCFolders.ps1 $source $destination $oldStaff
我收到以下错误消息:
Start-Process:找不到接受的位置参数 争论 '<%在发布到Stack Overflow%>'之前删除了服务器名称。在 line:1 char:1 + start powershell.exe。\ Move-WCFolders.ps1 $ source $ Description + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(:) [Start-Process],ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
我确信可能有更好的方法来实现我想要实现的目标。它没有感觉到干净'需要启动robocopy,或者必须在外部脚本中调用东西。最终目标是在排除目录时复制文件夹,在复制完成后移动文件夹,但不必等待副本完成以继续脚本。
答案 0 :(得分:1)
尝试使用Start-Job
。这比你想象的要容易,你将能够在以后捕获结果:
$job = Start-Job -FilePath '.\Move-WCFolder.ps1' -ArgumentList $source, $destination, $oldStaff
# do more processing here
# . . .
# wait for the job to finish and output the results
$job | Receive-Job
答案 1 :(得分:0)
start是Start-Process
的别名错误是因为最后的参数。
AFAIK,您很可能希望将它们转换为单个字符串以传递给powershell。
你可能想尝试这样的事情:
start powershell.exe -File .\Move-WCFolders.ps1 -ArgumentList "$source $destination $oldStaff"
你需要确保你有逃脱的权利,所以它可能最终看起来像这样:
start powershell.exe -File .\Move-WCFolders.ps1 -ArgumentList "`"$source`" `"$destination`" `"$oldStaff`""
您还可以使用Start-Job进行调查。