0
2

More than 1 year has passed since last update.

複数サーバに対して並列処理を実行するときの書き方

Last updated at Posted at 2020-07-22

未検証。手動実行想定。

単純に実行するときの書き方
# コマンドを実行したときにホスト名が縦に並ぶので実行している処理が判りやすい。

$Job = {
    # 各サーバで実行したい処理
}

Invoke-Command -AsJob -ScriptBlock $Job -ComputerName hoge
Invoke-Command -AsJob -ScriptBlock $Job -ComputerName fuga
Invoke-Command -AsJob -ScriptBlock $Job -ComputerName piyo
# ...

Get-Job | Wait-Job | Receive-Job
まとめて実行したいけどスロットリングしたいときの書き方
# 一気に流すと負荷が怖い
$Job = {
    # 各サーバで実行したい処理
}

# ジョブの数が減るまで待機するだけの関数
function throttle {
    param($n = 5)
    $jobs = get-job -state running
    while($jobs.Count -ge $n){
        sleep 1
        $jobs = get-job -state running
    }
}

throttle; Invoke-Command -AsJob -ScriptBlock $Job -ComputerName hoge
throttle; Invoke-Command -AsJob -ScriptBlock $Job -ComputerName fuga
throttle; Invoke-Command -AsJob -ScriptBlock $Job -ComputerName piyo
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2