WindowsUpdateに不具合が発生した際、
手動更新を行う為の補助手順として
WUA を使用したオフライン更新プログラムのスキャン
https://learn.microsoft.com/ja-jp/windows/win32/wua_sdk/using-wua-to-scan-for-updates-offline?tabs=powershell
が 提示されています。
これは WindowsUpdate を 行うのでは無く
更新プログラムを探すだけのプログラムです。
具体的に何をしろと言うと
① Wsusscn2.cab を ダウンロード
② ダウンロード した Wsusscn2.cab を
c:\Wsusscn2.cab へ 配置
③ VbScript または PowerShell の
スクリプト を 実行
サイトの説明だと
プログラムを読めない人には
何をやるのかさっぱりなので
補助をするプログラムと
参照先を変更した
スクリプトを準備しました
準備として
ブラウザは閉じるのでメモ帳に
バッチとスクリプトをコピー
しておいてください
手順として
① 「 ファイル名を指定して実行 」 を 起動
② 「 ファイル名を指定して実行 」 に 貼る内容 を コピー
③ 「 ファイル名を指定して実行 」 に コピーした内容 を 貼り付ける
④ 「 ファイル名を指定して実行 」を【 管理者として実行 】
③ 貼り付け直後に
[ Ctrl ] + [ Shift ] + [ Enter ]
⑤ ダウンロードが終了したら、ブラウザを閉じる
⑥ 「 PowerShell 」 に 貼る内容 を コピー
⑦ 「 PowerShell 」 に コピーした内容 を 【 右クリック 】 で 貼り付ける
※ [ Ctrl ] + [ V ] だと、最終行の Enter が 効かない
ダウンロードフォルダの Wsusscn2.cab を 削除してから
Wsusscn2.cab を ダウンロード し
PowerShell を 起動する バッチ
cmd /c,del /f "%USERPROFILE%\Downloads\wsusscn2.cab" & @echo; & @echo; ダウンロード完了後、Edgeを閉じ、起動したPowerShellにスクリプトを貼付 & @echo; & start "" msedge "https://catalog.s.download.windowsupdate.com/microsoftupdate/v6/wsusscan/wsusscn2.cab" & powershell
ダウンロードフォルダにある
Wsusscn2.cab を 参照するようにした PowerShell
終了時にダウンロードフォルダの
Wsusscn2.cab を 削除する スクリプト
# - + - ここから - + -
$UpdateSession = New-Object -ComObject Microsoft.Update.Session
$UpdateServiceManager = New-Object -ComObject Microsoft.Update.ServiceManager
$DownloadDirFile = ($Env:HomeDrive)+"\"+($Env:Public).Split("\")[1]+"\"+((Get-WMIObject -ClassName Win32_ComputerSystem).Username).Split("\")[1]+"\Downloads\wsusscn2.cab"
$UpdateService = $UpdateServiceManager.AddScanPackageService("Offline Sync Service", "$DownloadDirFile")
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
Write-Host "Searching for updates..."
$UpdateSearcher.ServerSelection = 3 # ssOthers
$UpdateSearcher.ServiceID = [string] $UpdateService.ServiceID
$SearchResult = $UpdateSearcher.Search("IsInstalled=0")
$Updates = $SearchResult.Updates
If ($SearchResult.Updates.Count -eq 0) {
Write-Host "There are no applicable updates."
Exit
}
Write-Host "List of applicable items on the machine when using wssuscan.cab:"
For ($i = 0; $i -lt $SearchResult.Updates.Count; $i++) {
$update = $SearchResult.Updates.Item($i)
Write-Host ($i + 1) "> " $update.Title
}
Remove-Item -Path "$DownloadDirFile" -Force
# - + - ここまで - + -