0

データの配列を実行可能プログラムにパイプしていますが、 foreach ループでの呼び出しごとにブロックする必要があります。最初の呼び出しからプログラムを開く前に、ループを離れます。

 Set-Alias program "whatever.exe"

 foreach ($data in $all_data)
  {
       $data| %{ program /command:update /path:"$_" /closeonend:2 }
  }
4

3 に答える 3

2

私は PowerShell が好きですが、実際に学んだことはありませんInvoke-Command。したがって、EXE を実行する必要があるときは常に cmd を使用します。入力cmd /?すると、そのヘルプが表示されます。「c」スイッチを見てください。私はこのようなことをします:

foreach ($data in $all_data){
    $data |
    Foreach-Object{
        cmd /c "whatever.exe" /command:update /path:"$_" /closeonend:2
    }
}

気に入らない場合は、cmd /cジョブを使用できます。

foreach ($data in $all_data){
    $data |
    Foreach-Object{
        $job = Start-Job -InitializationScript {Set-Alias program "whatever.exe"} -ScriptBlock {program /command:update /path:"$($args[0])" /closeonend:2} -ArgumentList $_
        while($job.Status -eq 'Running'){
            Start-Sleep -Seconds 3
            #Could make it more robust and add some error checking.
        }
    }
}
于 2013-05-22T19:14:06.367 に答える