【PowerShell】リモートコンピューターが再起動するまで待ち合わせるには
Windows PowerShell には Restart-Computer という便利なコマンドレットが用意されています。
Restart-Computer –ComputerName TARGETCOMPUTER とすれば、リモートコンピューターを再起動することができます。
もしリモートコンピューターに誰かがログオンしていても、-Force を指定することで強制的に再起動できます。もちろん管理者権限が必須です。
さて、ここで問題です。
リモートコンピューターに対して複雑な処理をしているとき、一度再起動が必要な処理があったとします。
もちろん、再起動後にも処理は継続しなければなりません。
どうしましょう?
例えば、以下のようなスクリプトを作れば、待ち合わせは可能です。
※ 2012.6.18 14:21 スクリプトに不備があったので修正しました...すみません
New-PSSession -ComputerName $ServerName Restart-Computer -ComputerName $ServerName -Force do #セッションが切断されるまで待ち合わせ { Start-Sleep -Seconds 1 } Until ((Get-PSSession -ComputerName $ServerName).count -eq 0) do #セッションが再接続されるまで待ち合わせ { Start-Sleep -Seconds 1 $S = New-PSSession -ComputerName $ServerName } Until ((Get-PSSession -ComputerName $ServerName).count -ne 0) echo 再接続されました $S Enter-PSSession $S |
比較的簡単に待ち合わせができることに、PowerShell 初心者の方は驚くかもしれませんが、まだ驚くのは早いです。
PowerShell 3.0 では、たった1行で待ち合わせが可能です。
Restart-Computer –ComputerName SERVERNAME –wait
これだけです。
すばらしすぎて腰が抜けそうです。