2021年3月9日に配信されたWindowsの更新プログラムによりプリンターを使用するとPCがクラッシュするバグが全世界的に発生している模様です。
既にインストールされてしまったPCでは、該当する更新プログラム(「KB5000802」・「KB50000808」・「KB50000822」)をアンインストールすることでバグを回避できますが、このままでは次回の更新プログラム確認時に再び同じ更新プログラムがインストールされてしまいます。
Windows 7までは、Windows UpdateのUIから更新プログラムを「非表示」にし、自動でインストールされないようにすることが可能でしたが、現行のWindows 10ではそのようなオプションは削除され、代わりに同等の機能を提供するトラブルシューティング ツール(wushowhide.diagcab)が配布されていました。
しかし、このツールのダウンロード先が先月ごろからリンク切れしているため、入手できない状況になっています。
@MicrosoftHelps @WindowsUpdate
— Bruce Roberts (@BAR01474) March 6, 2021
Why has the download link for wushowhide.diagcab been broken for more than a month?
That troubleshooter is the recommended solution in at least half a dozen Microsoft Support articles:https://t.co/Mc8cVkg6Ok
ダウンロード直リンクはこちら。アクセスすると現在404が返ってきます。
幸いなことに、私は1月ごろに入手済みでしたので、当該ツールで使われていたPowershellコードから得られた1、特定の更新プログラムのインストールを防止するPowershellスクリプトを再構成して掲載します。
スクリプト
- なお、実行には管理者権限が必要です。
- 非表示対象としてKB5000802を指定しているので、KB50000808・KB50000822を対象にしたい場合は、
$target =
の部分を該当する更新プログラムのフルネームに置き換えてください。
#Requires -RunAsAdministrator
# Must run this as an administrator!
# Based on the official wushowhide.diagcab
$target = "2021-03 x64 ベース システム用 Windows 10 Version 20H2 の累積更新プログラム (KB5000802)"
$session = New-Object -ComObject Microsoft.Update.Session
$searcher = $session.CreateUpdateSearcher()
$updates = $searcher.Search("IsInstalled=0").Updates
foreach($update in $updates){
if ($update.Title -eq $target){
$update.IsHidden = $true
}
}
更新プログラムの名前で検索しているので($target
)、代入式を書き換えれば他の更新プログラムにも適用できるほか、ユーザーに更新プログラム名を入力してもらうように改造することも可能でしょう。
REPLで実行する場合(Powershellを起動して手入力でコマンドを実行していく場合)は、$target =
の行からコピペすれば実行できます。
スクリプトとして保存して実行する場合は、 #Requires -RunAsAdministrator
を冒頭につけておくと、管理者権限がないときにあらかじめPowershell側でエラーを表示してくれます。2
なお、Powershell スクリプトの実行には簡単な事前準備が必要です。
リファレンスなど
COM オブジェクトには全くの門外漢ですが、上記スクリプト中で使っていそうな interface などのリファレンスを掲載しておきます。
-
IUpdateSession interface (wuapi.h) →
Microsoft.Update.Session
- IUpdateSession::CreateUpdateSearcher method (wuapi.h)
- IUpdateSearcher::Search method (wuapi.h)
スクリプトファイル(.ps1)
gistに投稿しました(03/13 22:08 追記)
-
トラブルシューティングツールを7-Zipなどで解凍すると、中に入っているPowershellコードを取り出すことができます。 ↩