Windows 10のWindows Updateが再起動待ちになったら自動シャットダウンするスクリプト:山市良のうぃんどうず日記(179)
前回は、特定のプロセスを監視して、終了後にシャットダウンするPowerShellスクリプトを紹介しました。今回もその応用で、Windows 10のWindows Updateが再起動待ちになったら自動的にシャットダウンを開始するスクリプトを紹介します。
Windows 10の品質/機能更新プログラムは再起動するまで終わらない
前回に続き、何かタスクの実行が完了した後に自動的にシャットダウンして、コンピュータを停止するように細工することで、後は放置して楽をするPowerShellスクリプトの例を紹介します。今回の監視対象は「Windows 10」のWindows Updateです。
自動更新が有効になっている場合、少なくとも1日に1回は自動的に利用可能な(自動更新の対象の)更新プログラムがないかどうかチェックされ、見つかった場合はバックグラウンドでダウンロードとインストールが行われます。
その後、再起動が必要な場合は(毎月のセキュリティ品質更新プログラムのためには必要です)、「アクションセンター」またはタスクバーの「通知領域」に再起動が必要である旨が通知されます。また、ユーザーが再起動の開始を指示せずに放置した場合は、アクティブ時間(既定は8:00〜17:00)外に自動的に再起動を開始するようになっています。
これは、「設定」アプリの「Windows Update」で「更新プログラムのチェック」をクリックして更新プログラムの確認を開始した場合も同様で、更新プログラムのインストールは、再起動中の処理を経て完了します。Windows 10の新しいバージョンである機能更新プログラムをインストールした場合も同様です。
更新プログラムのインストールを完了するまでの再起動を含めて、最終的にシャットダウンまでを自動化したいという要望があるようです。つまり、「再起動」ボタンの選択肢の他に、「再起動してシャットダウン」ボタンがあると、更新を開始してから電源をオフにするまで放置できて便利だろうということです。
しかし、そのような機能が実装されることはなさそうです。代替手段としては「スタート」メニューの「電源」メニューなどから「更新してシャットダウン」を実行し、更新プログラムのインストールの途中段階(通常、30%完了の時点)で電源をオフにする方法があります(画面1)。
今回は、Windows Updateの更新プログラムのインストールを監視し、再起動待ちの状態を検出して自動的なシャットダウンを開始するスクリプトに挑戦します。Windows Updateを開始して放置したまま、アクティブ時間外の自動的な再起動が開始する前に、安全に電源をオフにしたいときに利用することを想定したものです。
Windows 10 バージョン1709以降の「WindowsUpdateProvider」モジュールを活用
目的のスクリプトを作成するために、今回はWindows 10 バージョン1709以降と「Windows Server, version 1709」以降の「Windows PowerShell 5.1」および「PowerShell Core 7」(PowerShell Core 6は未確認)で利用可能な「WindowsUpdateProvider」モジュールを利用します。
「WindowsUpdateProvider」モジュールに含まれるコマンドレット(実際にはFunction)は、「Get-Command -Module WindowsUpdateProvider」で確認できます。また、本連載第145回と筆者の別の連載でも紹介しています。
- 更新プログラムのダウンロード/インストール進捗状況が知りたい―Windows 10(バージョン1709以降)の更新用スクリプト解説(本連載 145回)
- 面倒な“Windows 10の更新”をスクリプト化できる新たな選択肢(その2)(連載:企業ユーザーに贈るWindows 10への乗り換え案内 第30回)
作成したスクリプト「stoppcafterwu.ps1」を簡単に解説すると、「WindowsUpdateProvider」モジュールの「Get-WUIsPendingReboot」を30秒ごと実行し、「True」が返ってきたら“再起動待ち状態”と判断して、自動的にシャットダウンを開始するというものです。
Copyright © ITmedia, Inc. All Rights Reserved.