1. ホーム
  2. multithreading

[解決済み] Powershellでコマンドを並列に実行することはできますか?

2022-06-15 06:18:39

質問

大量の画像に対してバッチ処理を行うpowershellスクリプトがあるのですが、並列処理を行いたいと考えています。 Powershellにはstart-jobやwait-jobなどのバックグラウンド処理のオプションがあるようですが、並列処理を行うための良い資料は、スクリプトのテキストを書き出し、それらを実行することくらいしか見つかりませんでした( PowerShell マルチスレッド )

理想を言えば、.net 4の並列foreachのようなものが欲しいです。

みたいなかなりシームレスなもの。

foreach-parallel -threads 4 ($file in (Get-ChildItem $dir))
{
   .. Do Work
}

c#に落とした方がいいのかも...。

どのように解決するのですか?

Powershell 2 で並列ジョブを実行するには、次のようにします。 バックグラウンドジョブ . チェックアウト スタート-ジョブ および他のジョブ・コマンドレットを確認してください。

# Loop through the server list
Get-Content "ServerList.txt" | %{

  # Define what each job does
  $ScriptBlock = {
    param($pipelinePassIn) 
    Test-Path "\\$pipelinePassIn\c`$\Something"
    Start-Sleep 60
  }

  # Execute the jobs in parallel
  Start-Job $ScriptBlock -ArgumentList $_
}

Get-Job

# Wait for it all to complete
While (Get-Job -State "Running")
{
  Start-Sleep 10
}

# Getting the information back from the jobs
Get-Job | Receive-Job