Windows Updateで特定の更新パッケージを入れたくない場合、昔はパッケージを非表示にできたのですが、Windows 10や11ではできなくなっています。
このような要望が多い、というか過去に一部パッケージに不具合があったためマイクロソフトが非表示にするツール、wushowhide.diagcabを提供してくれていました。しかし、今日現在このパッケージは公開されておらず、有志の方がマイクロソフトとは関係なしに公開してくれている状況です。
このwushowhide.diagcabですがCABファイルなので、解凍して内容が閲覧できます。主な処理はPowerShellスクリプトで、COMオブジェクト経由でMicrosoft.Update.Sessionを開いて、パッケージのIsHiddenをTrueで非表示、Falseで表示にしているようです。非表示になったパッケージはWindows Updateでリストされなくなり、適用されない状況となります。
マイクロソフトのコピーライトがありますので、そのまま公開するわけにはいかないのですが、内容を参考に以下のPowerShellスクリプトを作成してみました。実行する上でIsHiddenの設定に管理者権限が必要です。
前提として、実行時にインストールしていないパッケージが存在し、それらに対して、表示、非表示の設定となります。まずは非表示設定から
$session = New-Object -ComObject Microsoft.Update.Session $res = $session.CreateUpdateSearcher().Search("IsInstalled=0").Updates foreach ($u in $res) { if ($u.IsHidden -ne $true) { Write-Output $u.Title $inkey = Read-Host "非表示にしますか? (y/n)" if ($inkey.ToUpper() -eq "Y") { $u.IsHidden = $true } } }
ここでインストールされていない更新パッケージがひとつずつ表示されますので、Yを入力するとそのパッケージを非表示にします。
表示設定は、IsHiddenを逆にFalseにします。
$session = New-Object -ComObject Microsoft.Update.Session $res = $session.CreateUpdateSearcher().Search("IsInstalled=0").Updates foreach ($u in $res) { if ($u.IsHidden -eq $true) { Write-Output $u.Title $inkey = Read-Host "再表示しますか? (y/n)" if ($inkey.ToUpper() -eq "Y") { $u.IsHidden = $false } } }