【问题标题】:Start a folder copy and continue script using PowerShell使用 PowerShell 启动文件夹复制并继续脚本
【发布时间】:2016-03-22 02:47:26
【问题描述】:

我对用于管理用户帐户的 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 : 找不到接受的位置参数 争论 ''。在 行:1 字符:1 + 启动 powershell.exe .\Move-WCFolders.ps1 $source $Description + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

我确信可能有更好的方法来实现我想要实现的目标。需要启动 robocopy 或必须在外部脚本中调用东西并不让人感觉“干净”。最终目标是在排除目录的同时复制文件夹,复制完成后移动文件夹,但不必等待复制完成才能继续执行脚本。

【问题讨论】:

    标签: powershell powershell-4.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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-02-16
        • 1970-01-01
        • 2021-07-20
        • 2019-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多