この不親切な手順に救援を　其の４：WUAを使用したオフライン更新プログラムのスキャン

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 の
　　スクリプト を 実行

サイトの説明だと
プログラムを読めない人には
何をやるのかさっぱりなので
補助をするプログラムと
参照先を変更した
スクリプトを準備しました

準備として
ブラウザは閉じるのでメモ帳に
バッチとスクリプトをコピー
しておいてください

手順として

①　「 ファイル名を指定して実行 」 を 起動
　　![「ファイル名を指定して実行」を起動.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98441/a6549fc1-aac4-9f7c-f0d7-04bd5d876953.jpeg)
②　「 ファイル名を指定して実行 」 に 貼る内容 を コピー
　　![「 ファイル名を指定して実行 」に貼る内容をコピー2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98441/eb901f11-a4f9-16ba-5fdb-3387c6f46d63.jpeg)
③　「 ファイル名を指定して実行 」 に コピーした内容 を 貼り付ける
　　![「 ファイル名を指定して実行 」に貼る内容を貼り付ける.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98441/97c9302e-e205-95b0-9503-69221243b86c.jpeg)　
④　「 ファイル名を指定して実行 」を【 管理者として実行 】
　　③ 貼り付け直後に
　　 [ Ｃｔｒｌ ] ＋ [ Ｓｈｉｆｔ ] ＋ [ Ｅｎｔｅｒ ]
⑤　ダウンロードが終了したら、ブラウザを閉じる
　　![ダウンロードが終了したら、ブラウザを閉じる.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98441/0f485dba-8f70-4c6e-211c-5de48cf9b3db.jpeg)
⑥　「 PowerShell 」 に 貼る内容 を コピー
　　![「 PowerShell 」に貼る内容をコピー2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98441/f16e546b-2318-4120-adb5-d7dc5c4359b4.jpeg)
⑦　「 PowerShell 」 に コピーした内容 を 【 右クリック 】 で 貼り付ける
　　※ [ Ctrl ] + [ V ] だと、最終行の Enter が 効かない
　　![「 PowerShell 」に内容を貼り付け.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98441/d0834c7e-f0f6-cf42-c634-b604535324b2.jpeg)

* * *
ダウンロードフォルダの Wsusscn2.cab を 削除してから
Wsusscn2.cab を ダウンロード し
PowerShell を 起動する バッチ
```bat:「 ファイル名を指定して実行 」に貼り付ける内容
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 を 削除する スクリプト
```bat:「 PowerShell 」に貼り付ける内容
# - + - ここから - + -

$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

# - + - ここまで - + -
```