Author Posts

January 24, 2016 at 5:01 pm

People,

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{
#[CmdletBinding()]
# 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",
[switch]$LogErrors
)
$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($_.psbase.properties["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.

Thanks,

January 25, 2016 at 1:25 am

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 }
}#Foreach
}#Function

January 26, 2016 at 4:42 pm

Vincent,

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.