このページの本文へ

前へ 1 2 次へ

Windows Info 第297回

Windows Updateの状態をコマンドラインから調べる方法を考える

2021年10月17日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 Windows Updateは、毎月のように品質アップデートがあり、その中には再起動を要求するものもの少なくない。とはいえ、頻繁に設定のWindows Updateを見るのも億劫だ。そこで、コマンドラインからWindows Updateの状態をチェックできるかを考えてみた。それが可能なら、たとえばタスクスケジューラーなどで定期的に実行することも可能になる。また、スクリプトを作れば、さまざまな形で通知できる。

Windows Update Agent APIを使うと、Windows Updateに関する情報を引き出すことができる。これは、再起動待ちのアップデートを検出した例。Windows 11の「設定」→「Windows Update」で再起動の保留中になっているプレビュー版を、上記のスクリプトが検出している

Windows Updateは大きく3つに分類できる

 Windows Updateについては、この連載でも何度か取り上げたが、概要に関しては、以下の記事を参照されたい。

●Windows Updateを飼い慣らして、都合のいい時間に再起動させる方法
 https://ascii.jp/elem/000/004/045/4045886/

 Windows Updateには、いろいろなものがあるが、状態をチェックするという視点からみると、大きく以下の3つに分類できる。

1. 勝手にインストールして終わるもの(再起動不要)
2. インストール完了後に再起動が必要になるもの
3. インストールを完了するために再起動が必要になるもの(インストールは未完了)

 1はたとえば、ウイルス定義のアップデートなどだ。この場合、勝手にダウンロード、インストールが進んで終了してしまうので、特に検出する必要もないし、そもそもよほど短い間隔でチェックを繰り返さないと検出が難しい。

 2と3は、インストールが自動の場合とユーザーが開始を指示しないとインストールされない場合があるのだが、現在のWindows 10では、ダウンロードに関しては自動で行なわれるようだ。ただし、品質アップデートのように大きなものは、ユーザーがダウンロードの開始を指示する必要がある。

 また、Windows Updateの設定により、インストールが自動で開始されることもある。具体的には「設定」→「Windows Update」→「詳細オプション」にある「更新プログラムをインストールするために再起動が必要な場合は、できるだけすぐにこのデバイスを再起動してください。以下略」という長い名前のトグルスイッチをオンにした場合だ。

 再起動が必要なWindows Updateは、複数の再起動が必要なアップデートがあったとしても、そのうちの1つでも作業を完了すると、ユーザーに再起動を促す。しかし、可能性としてまだ他のアップデートのインストールが完了していない場合がある。とはいえ、少なくとも再起動に関しては、タスクバーの通知領域やアクションセンターでの通知がある。

 これに対して、再起動要求の有無にかかわらず、インストールが進行中の場合、設定のWindows Updateのページを見ないことには何もわからない。今回はこれを検出することにしたい。

Windows Update Agent APIを使う

 Windows Updateに関する情報は、Windows Update Agent APIから入手できる。なお、このAPIは、COMなので、PowerShellなどからもアクセスが可能だ。ここでは、Windowsに標準で含まれるWindows PowerShellを使い、このAPIにアクセスしてみる。

●Windows Update Agent API(英語)
 https://docs.microsoft.com/en-us/windows/win32/api/_wua/

 プログラミングに関する細かい話には、おそらく多くの人が興味がないだろうから、現在Windows Updateが管理しているアップデートのリスト(インストール前のものと、インストール済みのもの)を入手する方法を示す。

リスト1

$WindowsUpdateSearch=(New-Object -ComObject Microsoft.Update.Session).CreateUpdateSearcher();
$update=$WindowsUpdateSearch.Search("IsInstalled=0 OR IsInstalled=1").updates;

 1行目でCOMオブジェクト“Microsoft.Update.Session”(これがWindows Update Agentオブジェクト)を作り、そこからアップデートを検索するための「UpdateSearcher」を作成する。2行目は、作成されたUpdateSearcherに検索条件("IsInstalled=0 OR IsInstalled=1")を渡して、Updatesオブジェクトを作成するものだ。何も条件を指定しないと"IsInstalled=0"か指定されたのと同じ結果が得られる。前記のURLを見る気も起きないような場合には、これをおまじないと思って使ってかまわない。

 2行目でUpdatesオブジェクトは、$updateという変数に保存したので、以後は、この$updateを使う。というのは、検索には1分ほど時間がかかることがあるので、毎回検索すると時間が掛かりすぎるからだ。ただし、Windows Updateの最新情報を得るためには、2行目を再度実行しなければならない。とはいえ、Windows Updateのデフォルトの更新は1日1回程度、つまり1日に数回繰り返して実行すればよい。

 Updatesオブジェクトには「設定」→「更新とセキュリティ」→「Windows Update」(Windows 11は「設定」→「Windows Update」)に表示されるWindows Updateを保持している。状態を確認するのに必要なプロパティには以下のようなものがある。

プロパティ名 意味 ドキュメント
IsInstalled アップデートはインストールされた https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdate-get_isinstalled
IsDownloaded アップデートはダウンロードされた https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdate-get_isdownloaded
RebootRequired 再起動が必要 https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdate2-get_rebootrequired
IsPresent アップデートが存在している https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdate2-get_ispresent

 前述のように、アップデートには3種類あり、検出するのは、再起動が必要なアップデートが進行中なのか、インストールが完了して再起動待ちなのかどうかという点。これには、Windows Update Agentでアップデートを検索し、そのプロパティを調べる。まずはアップデートが進行中の場合、プロパティは以下の状態となる。

IsInstalled = false
IsDownloaded =true
RebootRequired = false

 なお、実際にやってみたところ、すでにインストールが完了しているのにもかかわらず、アップデートが未インストールとして表示されるものがあったので、以下の条件を追加した。

IsPresent = false

 これを検出するには、PowerShellのWhere-Objectを使い、以下のリストのように実行する。

リスト2

$update | Where-Object {$_.isinstalled -eq $false -and $_.isdownloaded -eq $true -and $_.rebootrequired -eq $false -and $_.isPresent -eq $false} | Select-Object title

※ $updateは、リスト1で設定している

 もし、この条件を満たすアップデートがあれば、その時点で1回は設定のWindowsアップデートのページを確認したほうがいいだろう。場合によっては、ユーザーからのインストール指示待ちになっていることがある。また、すでに再起動の要求が出ていたとしても、この状態を満たすアップデートがあるなら、別のアップデートが進行中である。

 なお、アップデートはユーザーが指示するなどして、インストールが開始されると、2つの状態になる。1つは前述の「2」で、この場合、「IsInstalled」と「RebootRequired」がtrueとなる。もう1つは、前述の「3」で、こっちは「IsInstalled」はfalseのままだが、「RebootRequired」がtrueとなる。この2つを検出するには、以下のリストのコマンドを使う。

リスト3

$update | Where-Object {$_.rebootrequired -eq $true} | Select-Object title

※ $updateは、リスト1で設定している

 これらの条件をまとめたのが、以下の表だ。

 表の最初の3つが、インストールが完了していないアップデートだが、この中には、まだ何もしていないもの(表の一番上の行)と、すでにインストールしているにもかかわらず、再度通知が来たもの(2行目)があり、これらを区別するために3行目の条件を指定する必要がある。これに対して、再起動を要求しているアップデート(4、5行目)は、再起動が行なわれていないため、インストールが完了していない。

前へ 1 2 次へ

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,280
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,390
3
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
4
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥1,240
5
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
6
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥937
7
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
¥1,359
8
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652
9
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,590
10
UGREEN LANケーブル CAT8 1M メッシュLANケーブル カテゴリー8 コネクタ 超光速40Gbps/2000MHz CAT8準拠 イーサネットケーブル 爪折れ防止 シールド モデム ルータ PS3 PS4 Xbox等に対応 1M
UGREEN LANケーブル CAT8 1M メッシュLANケーブル カテゴリー8 コネクタ 超光速40Gbps/2000MHz CAT8準拠 イーサネットケーブル 爪折れ防止 シールド モデム ルータ PS3 PS4 Xbox等に対応 1M
¥699

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン