以前、 Windows Updateの特定のKBを検索を探すやり方を紹介しました。
PowerShellで所定のWindows Updateがインストールされているか確認する
今回は、削除までやってみましょう。
リモート先のサーバーにインストールされた KBも削除できるので、 Windows Update のバグ対応には便利ですよ。
コード全文
こんな感じで。
function Remove-KB{
param(
[parameter(
mandatory,
position = 0)]
[string[]]
$kbs
)
$PatchList = Get-WmiObject Win32_QuickFixEngineering | where HotFixId -in $kbs
foreach ($k in $PatchList)
{
# If the HotfixID property contains any text, remove it (some do, some don't)
$KBNumber = $k.HotfixId.Replace("KB", "")
# Write-Host $KBNumber
Write-Host ("Removing update with command: " + $RemovalCommand)
# Build command line for removing the update
$RemovalCommand = "wusa.exe /uninstall /kb:$KBNumber /quiet /log /norestart"
# Invoke the command we built above
Invoke-Expression $RemovalCommand
# Wait for wusa.exe to finish and exit (wusa.exe actually leverages
# TrustedInstaller.exe, so you won't see much activity within the wusa process)
while (@(Get-Process wusa -ErrorAction SilentlyContinue).Count -ne 0)
{
Start-Sleep 1
Write-Host "Waiting for update removal to finish ..."
}
}
}
実行するときは、kbを渡します。
KBが付いていてもいいです。無くてもいいです。
Remove-KB -kbs "KB2821895"
自動的に Windows Updateを削除してくれるので、纏まった台数の削除をする際にはないと困りますね。
GitHub
https://github.com/guitarrapc/PowerShellUtil/blob/master/Get-KBSearch/Remove-KB.ps1