Windows Admin Centerから拝借する「再起動スケジューリング」のマル秘テク山市良のうぃんどうず日記(214)

少し前に別の連載記事で、Windows Admin Centerのバグを指摘しつつ、そのバグのある機能を期待通りに動くようにした、再利用可能なPowerShellスクリプトを提案しました。今回はバグではありませんが、Windows Admin Centerの「更新プログラム」ツールにある再起動のスケジューリング機能を拝借します。

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

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

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

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

Windows Admin Centerで使われている“目からうろこ”の再起動テク

 以下の連載記事では、「Windows Admin Center」の「Get-NumberOfLoggedOnUsers」ファンクションが、ある条件下で正しい結果を返さないというバグを指摘し、それを修正して、期待通りに動作する「Get-NumberOfLoggedOnUsers」ファンクションを作りました(注:Windows Admin Centerのバグを修正するものではありません)。日常的な自動化された運用管理タスクの中で、WindowsやWindows Serverにログオン中のユーザーがいないかどうかを確認するのに活用できると思ったからです。

 今回は、Windows Admin Centerの「更新プログラム」ツールが備える、更新プログラムのインストール後の「再起動スケジューリング」を取り上げます。この機能にバグがあるわけではありません。どのように実装されているのか興味があったからです。

 「更新プログラム」ツールの特徴は、個々の更新プログラムのインストールの要否を選択できること、そして再起動を要求する更新プログラムをインストールする際、再起動の開始日時をスケジューリングできることです(画面1)。

画面1 画面1 Windows Admin Centerの「更新プログラム」ツールを利用すると、更新プログラムのダウンロードとインストールをすぐに開始しながら、再起動の開始日時を先延ばし(スケジューリング)できる

 更新プログラムの確認とダウンロード、インストールには「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)。

画面2 画面2 現在の日時から指定した日時までの秒数を計算し、shutdown.exeコマンドの「-t」オプションに指定していた

 このアイデアは思い付きませんでした。タスクへの登録ではないので、スケジューリングされた日時より前に再起動してしまっても、タスクが残るようなことはありません。スクリプトによるWindows Updateの自動化と組み合わせるなど、さまざまな管理操作に応用できそうです。

指定した日時に再起動を開始するPowerShellスクリプト

 筆者はプログラマーではないので、コードが冗長的なのはご勘弁いただくとして、2つのPowerShellスクリプトを作成しました。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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