繁体   English   中英

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

[英]Start a folder copy and continue script using PowerShell

我深入探讨了用于管理用户帐户的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

我收到以下错误消息:

启动过程:找不到位置参数,该位置参数在发布到Stack Overflow%>之前接受参数“ <%已删除的服务器名称”。 在第1行:char:1 +启动powershell.exe。\\ Move-WCFolders.ps1 $ source $ Description + ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo:InvalidArgument:(:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

我敢肯定,有一种更好的方法可以实现我想要达到的目标。 不需要启动robocopy或必须调用外部脚本中的内容并不“干净”。 最终目标是在排除目录的同时复制文件夹,复制完成后移动文件夹,而不必等待复制完成即可继续执行脚本。

尝试使用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

start是启动过程的别名

错误是因为参数末尾。

AFAIK,您很可能希望将它们转换为单个字符串以传递给powershell。

您可能要尝试这样的事情:

start powershell.exe -File .\Move-WCFolders.ps1 -ArgumentList "$source $destination $oldStaff"

您将要确保自己具有转义权,因此最终可能看起来像这样:

start powershell.exe -File .\Move-WCFolders.ps1 -ArgumentList "`"$source`" `"$destination`" `"$oldStaff`""

您也可以使用“开始作业”进行调查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM