使用PowerShell启动文件夹副本并继续脚本

时间:2016-03-21 17:27:56

标签: powershell powershell-v4.0

我在用于管理用户帐户的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,或者必须在外部脚本中调用东西。最终目标是在排除目录时复制文件夹,在复制完成后移动文件夹,但不必等待副本完成以继续脚本。

2 个答案:

答案 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进行调查。

相关问题