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-process で停止する理由は何ですか?

よろしくお願いします

ステファン

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 に答える