少し前に別の連載記事で、Windows Admin Centerのバグを指摘しつつ、そのバグのある機能を期待通りに動くようにした、再利用可能なPowerShellスクリプトを提案しました。今回はバグではありませんが、Windows Admin Centerの「更新プログラム」ツールにある再起動のスケジューリング機能を拝借します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
以下の連載記事では、「Windows Admin Center」の「Get-NumberOfLoggedOnUsers」ファンクションが、ある条件下で正しい結果を返さないというバグを指摘し、それを修正して、期待通りに動作する「Get-NumberOfLoggedOnUsers」ファンクションを作りました(注:Windows Admin Centerのバグを修正するものではありません)。日常的な自動化された運用管理タスクの中で、WindowsやWindows Serverにログオン中のユーザーがいないかどうかを確認するのに活用できると思ったからです。
今回は、Windows Admin Centerの「更新プログラム」ツールが備える、更新プログラムのインストール後の「再起動スケジューリング」を取り上げます。この機能にバグがあるわけではありません。どのように実装されているのか興味があったからです。
「更新プログラム」ツールの特徴は、個々の更新プログラムのインストールの要否を選択できること、そして再起動を要求する更新プログラムをインストールする際、再起動の開始日時をスケジューリングできることです(画面1)。
更新プログラムの確認とダウンロード、インストールには「Windows Update Agent(WUA)API」を利用します。MicrosoftはWSH(Windows Script Host)で動く、WUA API対応の便利なサンプルスクリプト「WUA_SearchDownloadInstall.vbs /Automate」を公開しているので、Windows Admin Centerのこの部分と同様のことをスクリプトで自動実行するのは比較的簡単です。
では、再起動のスケジューリングはどのように実現されているのでしょうか。再起動をスケジューリングした後に、対象サーバの「タスクスケジューラ」を確認してみましたが、タスクとしてはスケジューリングされていませんでした。
しかし、スケジューリングした日時の10分前に、ログオン中のユーザーのデスクトップに突然表示された「サインアウトしようとしています。Windowsを10分後にシャットダウンします。」のメッセージダイアログボックスを見て、これが「shutdown.exe」コマンドでスケジューリングされたものであると気が付きました。
Windows Admin Centerには、各ツールの個々の機能を実装しているPowerShellスクリプトを表示する機能があります。「更新プログラム」ツールの更新プログラムのインストール開始や再起動のスケジューリングは、「Install-WindowsUpdates」ファンクションに実装されていました。
その実装方法は至ってシンプルでした。現在の日時から再起動をスケジューリングした日時までの秒数を計算し、再起動が必要な更新プログラムのインストール後に「shutdown.exe -r -t <秒数>」を実行しているのです(画面2)。
このアイデアは思い付きませんでした。タスクへの登録ではないので、スケジューリングされた日時より前に再起動してしまっても、タスクが残るようなことはありません。スクリプトによるWindows Updateの自動化と組み合わせるなど、さまざまな管理操作に応用できそうです。
筆者はプログラマーではないので、コードが冗長的なのはご勘弁いただくとして、2つのPowerShellスクリプトを作成しました。
Copyright © ITmedia, Inc. All Rights Reserved.