Modifying PowerShell script for listing latest windows update on each servers

This topic contains 2 replies, has 2 voices, and was last updated by  IT Engineer 2 years, 5 months ago.

  • Author
  • #34237

    IT Engineer


    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.


  • #34243

    Vincent Karunaidas

    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 }

  • #34346

    IT Engineer


    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.

You must be logged in to reply to this topic.