Modifying PowerShell script for listing latest windows update on each servers


I’ve come up with this script below to perform:

Grab the content of text file for list of server name
Test / check if the server is online, if it is not, then write the error in $ErrorLog = “C:\TEMP\retry.txt”
For all online server grab the HotfixID, Computername, InstalledOn, InstalledBy, OSVersionattributes
Export to CSV file as the result.
Here’s the script that I can come up so far with the way to call the function:

function Get-PatchLevel1{

delete or edit select-object 1 in the hotfix parameter to scope the output with specific hotfix number

param (
$serverlist = @(),
[string]$ErrorLog = “C:\TEMP\retry.txt”,
$serverlist |
% {
$server = $_
If(Test-Connection -quiet -computername $server) {
$ADC= Get-ADComputer $server –Property OperatingSystem
$hotfix = Get-HotFix -ComputerName $server |
#where-object {$.hotfixid -ne “KB3116900”} |
Select hotfixid, description, installedby, @{label=“InstalledOn”;e={[DateTime]::Parse($[“installedon”].value, $([System.Globalization.CultureInfo]::GetCultureInfo(“en-AU”)))}} |
Sort-Object -Property InstalledOn |
Select-Object -Last 1

  New-Object PSObject -Property @{
    Computername = $server
    OSVersion    = $ADC.OperatingSystem
    Hotfix       = $hotfix.HotfixID
    InstalledOn  = $hotfix.InstalledOn
	InstalledBy  = $hotfix.installedby

} | Export-Csv C:\TEMP\PatchLevelAdServers1.csv -NoTypeInformation -UseCulture

And this is how I call the function:

Get-PatchLevel1 -serverlist “TESTAPPS01-VM”, “DEVSQL02-VM”, “PRODDC02-VM”, “PRODNAS05-VM”

However, there are some issues here:

  1. The offline server is not written to the $ErrorLog = “C:\TEMP\retry.txt”
  2. When compared with the Control Panel\System and Security\Windows Update\View update history the result is not the same thus confusing me ?

Any kind of help would be greatly appreciated.


U didn’t use Else Statement

Try this
New-Object PSObject -Property @{
Computername = $server

InstalledBy = $hotfix.installedby
} | Export-Csv C:\TEst\PatchLevelAdServers1.csv -NoTypeInformation -UseCulture -Append
} Else { Write-Output $server | Out-File $ErrorLog -Append }


Thanks for the reply.

That does the trick for #1. What about number 2 ?

The script still returns all result of the patch installed, I just need to get the latest patch that was installed on the servers.