Yesterdays Post Show-WindowsUpdatesLocal does enable you to search for an installed update as follows
Show-WindowsUpdatesLocal|Where-Object {$_.HotFixID -eq ‘KB2855336’} |Select Date, HotfixID, Result,Title|Format-Table –AutoSize
I thought I would be able to do it quicker especially if I was searching a server with a lot of updates so I thought I would create a function to answer the question Is this update installed on that server
It is very similar to Show-WindowsUpdatesLocal but does not include the Title or Description on the grounds that if you are searching for it you should know those!!
It also only adds the output to the collection if the KB is in the HotFixID property as shown below
If we use Measure-Command to compare the two we can see
From 3.89 seconds on my poor overworked machine to 1.79 seconds 🙂
You can find the code here
############################################################# ########
#
# NAME: Search-WindowsUpdatesLocal.ps1
# AUTHOR: Rob Sewell https://blog.robsewell.com
# DATE:22/09/2013
#
# COMMENTS: Load function to show search for windows updates by KB locally
#
# USAGE: Search-WindowsUpdatesLocal KB2792100|Format-Table -AutoSize -Wrap
#
Function Search-WindowsUpdatesLocal ([String] $Search) {
$Search = $Search + "\d*"
$Searcher = New-Object -comobject Microsoft.Update. Searcher
$History = $Searcher.GetTotalHistoryCount()
$Updates = $Searcher.QueryHistory(1, $History)
# Define a new array to gather output
$OutputCollection = @()
Foreach ($update in $Updates) {
$Result = $null
Switch ($update.ResultCode) {
0 { $Result = 'NotStarted'}
1 { $Result = 'InProgress' }
2 { $Result = 'Succeeded' }
3 { $Result = 'SucceededWithErrors' }
4 { $Result = 'Failed' }
5 { $Result = 'Aborted' }
default { $Result = $_ }
}
$string = $update.title
$SearchAnswer = $string | Select-String -Pattern $Search | Select-Object { $_.Matches }
$output = New-Object -TypeName PSobject
$output | add-member NoteProperty “Date” -value $Update.Date
$output | add-member NoteProperty “HotFixID” -value $SearchAnswer.‘ $_.Matches ‘.Value
$output | Add-Member NoteProperty "Result" -Value $Result
if ($output.HotFixID) {
$OutputCollection += $output
}
}
$OutputCollection
}