【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

これだけです。

すばらしすぎて腰が抜けそうです。