【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

これだけです。

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

Comments (0)

Skip to main content