1

我尝试使用 powershell 脚本加速我们的复制作业。

我遍历服务器列表并尝试为每个副本启动一个作业。

foreach ($i in $serverlist)
{   
    if (Test-Connection -ComputerName $i -Count 1 -Quiet) {
        Start-Job -ScriptBlock {
        robocopy c:\temp d:\temp /MIR /R:0
    } -name CopyJob_$i | Out-Null
    }
}

该脚本运行良好,但它在复制时停止,直到它到达下一个服务器。我认为新作业将在后台运行,并且脚本会迭代到下一个服务器。

知道为什么循环会在 robocopy 过程中停止吗?

提前谢谢了

斯特凡

4

1 回答 1

2

它不应该阻塞副本本身的执行,它只会阻塞直到Test-Connection完成并开始作业。

现在,您的脚本每次都从本地计算机C:\temp或本地计算机上复制。D:\temp你可能想要这个:

$jobs = foreach ($serverName in $serverlist) {
    Write-Host "Starting copy job for $serverName"
    Start-Job -Name "Copyjob $serverName" -ArgumentList $serverName -ScriptBlock {
      param($serverName)

      if (Test-Connection -ComputerName $serverName -Count 1 -Quiet)
      {
        robocopy "\\$serverName\`$c\temp" "\\$serverName\`$d\temp" /MIR /R:0
      }
   }
}

$jobs | Wait-Job
$jobs | Receive-Job
于 2012-09-13T14:22:53.040 回答