米国時間で毎月第2火曜日は、毎月恒例の「Windows Updateの日」です。2022年も残すところ12月のあと1回。11月のBリリースを例に、前日と当日で筆者のルーティンとなっている作業を紹介しましょう。一般ユーザーやIT管理者にはこのような作業は必要ないはずですが、ちょっとしたテクニックもあります。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
米国時間で毎月第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)。
Bリリースの当日は、保存状態の仮想マシンを開始するだけで、OSの起動時間なしですぐに更新の確認、ダウンロード、インストールを開始できます(画面2)。OSの最初の起動時間を省けるだけで、全てを完了するまでの時間を大幅に短縮できます。
更新プログラムをインストールするときだけ起動する仮想マシンの場合は、メンテナンスタスクが実行されず、次回の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
さまざまなバージョンや、多数のWindows仮想マシンを毎月更新していると、何台かはダウンロードやインストール、あるいはWindows Update後の再起動がなかなか進まないものが出てきます。ほとんどの場合、我慢強く待っていれば完了するのですが、そうではないこともあります。ローカルHyper-Vの仮想マシンの場合、前月のBリリース時に作成したチェックポイントに戻して再実行すると、不思議なことに何事もなかったかのように完了することもあります。
Microsoft Azure上のWindows仮想マシンの場合は、ローカルHyper-Vの仮想マシンのように手軽にチェックポイントに戻すということはできません。以前、1台のWindows仮想マシンが再起動から1時間たっても戻ってこないということがありました。Azureポータルから無理やり再起動(リセット)すると、次にリモートデスクトップ接続でログオンした際に、「シャットダウンイベントの追跡ツール」が出現することで、不適切にリセットされたことが分かります(画面4、画面5)。おそらく起動時にチェックディスクが走っているのでしょうが、もちろんその様子は見えません。
いろいろと試した結果、次の方法で(おそらく)正常にシャットダウンまたは再起動できることが分かりました。
具体的には、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
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.