Windows禁止安装某一更新

Windows禁止安装某一更新

六月 18, 2021

如何防止 Windows 更新安装特定更新 (Powershell)
2021 年 3 月 9 日发布的 Windows 更新导致使用打印机时 PC 崩溃和任务栏错位的错误。

在 Windows 7 之前,可以”隐藏”Windows 更新 UI 中的更新,以防止自动安装,但在当前 Windows 10 中,这些选项已被删除,而是分发了提供等效功能的故障排除工具 (wushowhide.diagcab)

但是,由于此工具自上个月以来一直在链接中过期,因此不可用。

幸运的是,我在 1 月左右获得,因此我重新配置并发布 Powershell 脚本,以防止安装来自该工具中使用的 Powershell 代码的特定更新。

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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
}
}

–>(Github List Here)[https://gist.github.com/MaySoMusician/23c6943a5393c87161a6fffa544dbf3e]


原文

Windows Update で特定の更新プログラムがインストールされないようにする方法(Powershell)

2021年3月9日に配信されたWindowsの更新プログラムによりプリンターを使用するとPCがクラッシュするバグが全世界的に発生している模様です。

https://gigazine.net/news/20210312-windows-update-cause-printer-crash/

既にインストールされてしまったPCでは、該当する更新プログラム(「KB5000802」・「KB50000808」・「KB50000822」)をアンインストールすることでバグを回避できますが、このままでは次回の更新プログラム確認時に再び同じ更新プログラムがインストールされてしまいます。

Windows 7までは、Windows UpdateのUIから更新プログラムを「非表示」にし、自動でインストールされないようにすることが可能でしたが、現行のWindows 10ではそのようなオプションは削除され、代わりに同等の機能を提供するトラブルシューティング ツール(wushowhide.diagcab)が配布されていました。

しかし、このツールのダウンロード先が先月ごろからリンク切れしているため、入手できない状況になっています。

@MicrosoftHelps @WindowsUpdate

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

— Bruce Roberts (@BAR01474) March 6, 2021

ダウンロード直リンクはこちら。アクセスすると現在404が返ってきます。

幸いなことに、私は1月ごろに入手済みでしたので、当該ツールで使われていたPowershellコードから得られた1、特定の更新プログラムのインストールを防止するPowershellスクリプトを再構成して掲載します。

スクリプト

  • なお、実行には管理者権限が必要です。
  • 非表示対象としてKB5000802を指定しているので、KB50000808・KB50000822を対象にしたい場合は、 の部分を該当する更新プログラムのフルネームに置き換えてください。$target =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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 =

スクリプトとして保存して実行する場合は、 を冒頭につけておくと、管理者権限がないときにあらかじめPowershell側でエラーを表示してくれます。#Requires -RunAsAdministrator

なお、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 追記)

https://gist.github.com/MaySoMusician/23c6943a5393c87161a6fffa544dbf3e