“ワンオペ”はつらいよ、複数台のWindows Update作業にかかる手間を減らすには山市良のうぃんどうず日記(246)

米国時間で毎月第2火曜日は、毎月恒例の「Windows Updateの日」です。2022年も残すところ12月のあと1回。11月のBリリースを例に、前日と当日で筆者のルーティンとなっている作業を紹介しましょう。一般ユーザーやIT管理者にはこのような作業は必要ないはずですが、ちょっとしたテクニックもあります。

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

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

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

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

数が多いとワンオペは苦行、前日からの準備で時短を図る

 米国時間で毎月第2火曜日、つまり日本はその翌日の水曜日に、重要な更新プログラムとして「Bリリース」とも呼ばれるセキュリティ更新を含む「品質更新プログラム」がWindowsや.NET/.NET Framework、「Microsoft 365」アプリ(Office)向けに提供されます。筆者はBリリースの日に他の仕事にほとんど手を付けることなく、手元にある複数の物理マシンや仮想マシンを欠かさず更新するのが、毎月のルーティン作業になっています。

 ライターである筆者のPC環境は少し特殊です。1台のサーバ機と複数台のPC、そして複数のHyper-V環境上にある、さまざまなバージョンのWindowsやWindows Serverがインストールされた仮想マシン、Microsoft Azure上のWindows仮想マシンなどがあります。

 メインで使用しているのは1台のデスクトップPCと1台のノートPCですが、その他は家族用のノートPCやタブレットで、多数の仮想マシンはテストや評価のために使用するものです。OSライフサイクル期間中のWindowsがインストールされている仮想マシンは25台以上で、これらは毎月欠かさずBリリースの日に最新に更新します。それ以外にサポートが切れたWindowsも保持していますが、それらはアーカイブ的に保持しているもので、めったに起動することはありません。

 物理環境はすぐに終わるのでよいのですが、問題は多数の仮想マシンの更新作業です。ハイスペックのサーバがあるわけではないので、同時実行可能な仮想マシンは2〜3台が限界です。また、常時実行しているわけではなく、日常的にはほとんど起動することがないものばかりです。Bリリースの前後だけに起動するものもあります。仮想マシンは起動しても、OSが立ち上がるまでに少し時間もかかります。

 その時間を省略するため、Bリリースの前日に仮想マシンを起動し、「Microsoft Edge」やその他のモダンブラウザ、「Windows 10」や「Windows 11」の場合はストアアプリ、「Adobe Reader」などをその時点で最新に更新した上で、実行中の仮想マシンを保存状態で停止しておきます。この前日の作業は、更新対象となる全ての仮想マシンに行います(画面1)。

画面1 画面1 Bリリースの前日のルーティン作業。Bリリースの更新をすぐに開始できる時点にして仮想マシンの状態を保存

 Bリリースの当日は、保存状態の仮想マシンを開始するだけで、OSの起動時間なしですぐに更新の確認、ダウンロード、インストールを開始できます(画面2)。OSの最初の起動時間を省けるだけで、全てを完了するまでの時間を大幅に短縮できます。

画面2 画面2 Bリリースの当日。仮想マシンを起動してすぐに更新開始。更新作業が終わったらシャットダウンしてチェックポイントを作成

更新後の後処理の自動化

 更新プログラムをインストールするときだけ起動する仮想マシンの場合は、メンテナンスタスクが実行されず、次回のWindows Updateで処理が重なって更新プログラムのダウンロードやインストールに影響することがあります。

 具体的には、Windows Updateによる更新の完了後には、「タスクスケジューラ(Taskschd.msc)」のタスクパス「\Microsoft\Windows\DiskCleanup」にある「SilentCleanup」や、タスクパス「\Microsoft\Windows\.NET Framework\」にある「.NET Framework NGEN v4.0.30319 Critical」と「.NET Framework NGEN v4.0.30319 64 Critical」が、次回のWindows Updateまでに“実行済み”になっているとよいようです。

 特に、.NET Frameworkのタスクが実行済みであることが望ましいです。これらのタスクは.NET Frameworkの更新プログラムがインストールされると、「準備完了」状態となりアイドル時間に実行され、実行後、「無効」状態に切り替わります。「無効」であれば、既に実行済みか、.NET Frameworkの更新プログラムがなかったということになります。

 しかし、いちいち「タスクスケジューラ」を開いて確認するのは面倒です。以前の筆者は、タスクの状態に関係なく、本連載第174回で紹介した「ngen.exe.exe」コマンドのバッチファイルを実行していました。

 最近は、筆者の以下の個人ブログで紹介している、自作スクリプト「runtask.ps1」を使用して自動化しています。

 「runtask.ps1」は、タスクが「実行中」であれば終わるまで待ち、「準備完了」状態であれば実行を開始して完了まで待ちます。タスクが「無効」状態の場合は何もしません。例えば、Windows Updateが完了し、再起動したら、PowerShellを管理者として開いて、次のような1行のコマンドラインを実行します(実際にはバッチファイル化しています)。タスクの実行が不要の場合は、すぐにシャットダウンを開始するため、これも時間短縮に寄与します(画面3)。

.\runtask.ps1 ".NET Framework NGEN v4.0.30319 Critical" "\Microsoft\Windows\.NET Framework\";.\runtask.ps1 ".NET Framework NGEN v4.0.30319 64 Critical" "\Microsoft\Windows\.NET Framework\";Stop-Computer -Force
▲runtask.ps1
画面3 画面3 筆者自作スクリプト「runtask.ps1」は、必要があればタスクを開始して終わるまで待つ。上の画面はタスクを実行、下の画面は実行しない。タスクスケジューラを開く必要はない

Windows Updateで必ず出てくる“困ったちゃん”

 さまざまなバージョンや、多数のWindows仮想マシンを毎月更新していると、何台かはダウンロードやインストール、あるいはWindows Update後の再起動がなかなか進まないものが出てきます。ほとんどの場合、我慢強く待っていれば完了するのですが、そうではないこともあります。ローカルHyper-Vの仮想マシンの場合、前月のBリリース時に作成したチェックポイントに戻して再実行すると、不思議なことに何事もなかったかのように完了することもあります。

 Microsoft Azure上のWindows仮想マシンの場合は、ローカルHyper-Vの仮想マシンのように手軽にチェックポイントに戻すということはできません。以前、1台のWindows仮想マシンが再起動から1時間たっても戻ってこないということがありました。Azureポータルから無理やり再起動(リセット)すると、次にリモートデスクトップ接続でログオンした際に、「シャットダウンイベントの追跡ツール」が出現することで、不適切にリセットされたことが分かります(画面4画面5)。おそらく起動時にチェックディスクが走っているのでしょうが、もちろんその様子は見えません。

画面4 画面4 1時間たっても再起動が終わらないAzure仮想マシンを「ブート診断」で確認すると、この画面で止まっているように見える。画面を更新すると点々の位置が動いている
画面5 画面5 Azureポータルのメニューから「再起動」をクリックすると、次回ログオン時に「シャットダウンイベントの追跡ツール」が出てくる

 いろいろと試した結果、次の方法で(おそらく)正常にシャットダウンまたは再起動できることが分かりました。

 具体的には、Azureポータルの「シリアルコンソール」を使用します。Microsoft AzureのWindows仮想マシンでは「EMS(Emergency Management Services:緊急管理サービス)」の「Special Administration Console(SAC)」というシリアルコンソール接続に標準対応しています(Windows Serverゲストのみ、WindowsデスクトップOSでは利用不可、Linuxゲストはローカルコンソール接続)。

 Azureポータルで「シリアルコンソール」を開き、SACプロンプトが表示されたら、次のようにしてゲストOSのコマンドプロンプトに接続します。

SAC> cmd
SAC> ch -si 1
ユーザー:<管理者のユーザー名>
ドメイン:<(空欄またはドメイン名)>
パスワード:<管理者のパスワード>

 コマンドプロンプトに接続したら、「tasklist」コマンドで「TrustedInstaller.exe」プロセスのプロセスIDを確認し、「taskkill」コマンドでそのプロセスを強制終了します。この方法で、シャットダウンまたは再起動が進みました(画面6)。

tasklist
taskkill /pid <TrustedInstaller.exeのプロセスID> /f
画面6 画面6 SACコンソールのコマンドチャネル接続を介して「TrustedInstaller.exe」のプロセスを強制終了したら、シャットダウンや再起動が進んだ

 EMSおよびAzureポータルのシリアルコンソールについては、以下の記事も参考にしてください。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP 2008 to 2023(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

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

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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