Windows 11になって、Windows 10よりもマシになったとはいえ、最低でも月に一回は、Windows Updateで再起動が必要になる。このとき、設定によっては、まだ、アップデートがインストールされていないのに、先にインストールが終わったアップデートの再起動要求が表示されてしまう。残念ながら、現在のWindowsには、再起動が必要なアップデートがすべて終了してから再起動を要求するようにはなっていない。1つでも再起動が必要なアップデートが終了すれば、残りのアップデートがどうであろうとも、再起動を要求してしまう。何も考えないで、言われたままに再起動すると、何回も再起動しなければならない。

1つの対策は、設定で行える。設定 ⇒ Windows Updateにある「利用可能になったらすぐに最新の更新プログラムを入手する」をオフにする。これで、早期にアップデートが行われるのを防ぐことができる。さらに、「設定 ⇒ Windows Update ⇒ 詳細オプション」で、「最新の状態にしてください」と「更新を完了するために再起動が必要な場合に通知を受け取る」をオフにする。

Windows Updateが要求する再起動は、最大で1週間の猶予がある。なので、インストールが完了し再起動要求があってもすぐに再起動する必要はない。他のアップデートが終了するまで待ち、再起動をまとめて行えばよい。

再起動が必要になると「設定 ⇒ Windows Update」のページに再起動を要求する表示が行われるが、これを見るためだけに設定ページを開くのも面倒だ。実は、Windows Updateの状態は、コマンドラインからも調べることができる。

まずは、Windows Updateの情報を得る。それには、以下のコードをPowerShellで実行する。

$WUS=(New-Object -ComObject Microsoft.Update.Session).CreateUpdateSearcher()

$myWU=$WUS.Search("IsInstalled=0 OR IsInstalled=1").updates

これでWindows UpdateエージェントのAPIを利用できるようになる。ただし、2行目のコマンドで、Windows Updateの情報をMicrosoft側から取得するのに少し時間が掛かる。あとは、条件を指定して検索を行う。(表01)にWindows Updateの通知からインストール完了までの経過と、Windows Updateのプロパティ(状態)の関係を示す。

■表01

たとえば、再起動が要求されているかどうかは、以下のコマンドで判定できる。

$myWU | where { $_.rebootrequired -eq $true } | select Title

これにより、インストール済み、あるいは再起動でインストールが完了するアップデートが存在するかどうかを判定できる。ただし、前述のようにまだ、他にインストールされていないアップデートがあるかもしれない。また、その中には、再起動を必要とするものが存在する可能性もある。

処理中(ダウンロードが終了し、インストール待ち、あるいはインストール中)のアップデートが存在するかどうかは、以下のコマンドで判定できる。

$myWU | where { $_.isinstalled -eq $false -and $_.isdownloaded -eq $true -and $_.rebootrequired -eq $false -and $_.isPresent -eq $false } | select Title

まだ、インストールが始まっていない場合、自動でダウンロードとインストールが行われる「通常アップデート」とユーザーが手動でダウンロード、インストールを開始させる「オプションアップデート」の2つを区別する必要がある。その判定は、DeploymentActiondで行う。この値が4(daOptionalInstallation)のアップデートは、オプションのアップデートだ。

$myWU | where {$_.isinstalled -eq $false -and $_.DeploymentAction -eq 4} | select Title

これは、「設定 ⇒ 詳細オプション ⇒ オプションの更新プログラム」に表示されるアップデートで、通常はユーザーが手動でダウンロードとインストールを行う。逆にこの値が4以外のものでインストールされていないものは、通常インストールで、これは、待っていれば、そのうちダウンロードが開始され、インストールが行われる。これらをまとめて簡易表示が行えるスクリプトを(リスト01)に示す。

■リスト01

$WindowsUpdateSearch=(New-Object -ComObject Microsoft.Update.Session).CreateUpdateSearcher();

$myWU=$WindowsUpdateSearch.Search("IsInstalled=0 OR IsInstalled=1").updates;

Write-Host "通知のみ";

$myWU | where {$_.isinstalled -eq $false -and $_.DeploymentAction -ne 4 } | select Title;

Write-Host "処理が進行中";

$myWU | where { $_.isinstalled -eq $false -and $_.isdownloaded -eq $true -and $_.rebootrequired -eq $false -and $_.isPresent -eq $false } | select Title;

Write-Host "再起動待ち";

$myWU | where { $_.rebootrequired -eq $true } | select Title;

Write-Host "オプションのアップデート";

$myWU | where {$_.isinstalled -eq $false -and $_.DeploymentAction -eq 4} | select Title;

今回のタイトルネタは、1963年の米国ドラマ「The Outer Limits」(邦題 空想科学劇場アウターリミッツ。1964年)のエピソードの1つ「The Man with the Power」である。「これはテレビの故障ではありません」のナレーションでオシロスコープの波形が出るオープニング、一話完結のSFストーリーで、恐怖を前面に出したものが多かった。「The Man with the Power」は、念力を可能にする装置を開発した教授の話。その教授を演じるのが、のちに「刑事コロンボ」の「別れのワイン」の犯人や、映画「007は二度死ぬ」のブロフェルド役を演じた、ドナルド・プレザンス(Donald Henry Pleasence)である。