全ての仮想マシンが停止したらホストをシャットダウンするスクリプト山市良のうぃんどうず日記(178)

本連載第174回では、Windows Server 2016の更新プログラムのインストール時に実行が重なると影響が大きいメンテナンスタスクについて、時短に役立つかもしれないコマンドラインのテクニックを紹介しました。今回はその応用です。

» 2020年05月13日 05時00分 公開
[山市良テクニカルライター]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「山市良のうぃんどうず日記」のインデックス

山市良のうぃんどうず日記

特定のプロセスを監視して終了後にシャットダウンするスクリプト

 本連載の第174回では、特に「Windows Server 2016」において、Windows Updateの更新プログラムのインストール処理と重なると影響が大きいバックグラウンド実行のメンテナンスタスクを、更新前または更新後に手動で実施することで、次回のWindows Updateの時短を図るコマンドラインのテクニックを紹介しました。

 その際に紹介したPowerShellスクリプト「myprocmon.ps1」は、Windows Server 2016のデスクトップエクスペリエンス環境で、自動クリーンアップ処理のためにバックグラウンドで実行される、または手動で実行した「ディスククリーンアップ」のプロセス(cleanmgr)の存在を定期的に確認し、プロセスが終了したら監視を終了するというものでした。cleanmgrプロセスが実行中の物理マシンや仮想マシンでこのスクリプトを実行すれば、後は放置しておいてもシャットダウンして停止してくれます。

 「\Microsoft\Windows\DiskCleanup\SilentCleanup」タスクの実行中、またはこのタスクに設定されたコマンドライン(cleanmgr.exe /autoclean /d C:)の手動実行と組み合わせて利用することを想定して作成しましたが、「Windows 10」で「ディスククリーンアップ」を実行し、「Windows Updateのクリーンアップ」を選択して、時間がかかるクリーンアップを実施するときにも活用できます(画面1画面2)。

while(1) {
    $procid = (Get-Process -ProcessName "cleanmgr" -ErrorAction SilentlyContinue).Id
    if ($procid.Length -eq 0) {
        Write-Host "cleanmgr not running currently"
	break
    } else {
        Write-Host "cleanmgr (PID" $procid ") is alive"
    }
    Start-Sleep -seconds 15
}
TIMEOUT 30
Stop-Computer -Force
▲「myprocmon.ps1」

画面1 画面1 PowerShellスクリプト「myprocmon.ps1」による「cleanmgr」プロセスの監視
画面2 画面2 自動クリーンアップ処理が完了すると「cleanmgr」プロセスが終了し、自動的にシャットダウンが始まる

全ての仮想マシンが停止したらHyper-Vホストを停止するスクリプト

 PowerShellスクリプト「myprocmon.ps1」を作成してからは、何かしらの処理の実行を開始して放置し、自動終了させるために、いろいろと重宝しています。Hyper-Vの仮想マシンのゲストOSで利用することが多いのですが、今回はHyper-Vホストの稼働状況と連動することも考えてみました。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。