Are you in need of a script which uninstall patches from both local and remote computers? You landed at right place. Today I came across a question in one of the forum asking for a way to uninstall patches/security updates/hotfixes from llocal or remote computers. While this is an easy thing to perform on local computers, it is little tricky when it comes to remote computers. I thought about it some time and finally came up with below code which works for both local and remote computers. All it does is, constructs a uninstall command for the given patch and executes that using WMI process class.
This script comes handy for you when you want to uninstall patches from Windows 2008 Core server which don’t have a GUI and can’t perform uninstallations the way you do in regular windows 2008 OS.
Here is the code:
function Uninstall-Hotfix { [cmdletbinding()] param( $computername = $env:computername, [string] $HotfixID ) $hotfixes = Get-WmiObject -ComputerName $computername -Class Win32_QuickFixEngineering | select hotfixid if($hotfixes -match $hotfixID) { $hotfixID = $HotfixID.Replace("KB","") Write-host "Found the hotfix KB" + $HotfixID Write-Host "Uninstalling the hotfix" $UninstallString = "cmd.exe /c wusa.exe /uninstall /KB:$hotfixID /quiet /norestart" ([WMICLASS]"\\$computername\ROOT\CIMV2:win32_process").Create($UninstallString) | out-null while (@(Get-Process wusa -computername $computername -ErrorAction SilentlyContinue).Count -ne 0) { Start-Sleep 3 Write-Host "Waiting for update removal to finish ..." } write-host "Completed the uninstallation of $hotfixID" } else { write-host "Given hotfix($hotfixID) not found" return } }
Usage:
Uninstall-HotFix -ComputerName PC1 -HotfixID KB123456