Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
With the Current issue with Ransome Wancrypt we had a requirement where we had WSUS only to get report. WSUS reports are there but the reports were not friendly.
So we had to write two scripts using powershell , one to Get the Summary of Update Installation Status for a Specific or a Set of Updates and second one to get the list of computers where a updated is needed for a specific Update or for a set of updates.
Thought of Sharing the same as it could be useful for few who are using WSUS as their Patching Mechanism.
- Updates Status Primary for a Specific or a Group of Updates. (These Update ID are for KB4012212,KB4012213,4012214,KB4012598)
##########################################################################
#Script to get the Report from WSUS for Updates Status Primary for a Specific or a Group of Updates
#Version 1.0 File Name Report_Summary.ps1
# Output Folder file path is $outputfile a
#Created by: Sudheesh Narayanaswamy
#Created for Any WSUS server
#Created on: 5/16/2017
#Run this script in the WSUS server
################################################################################
$outputfile = "C:\Temp\"
$outputfile = $outputfile + "Report_Summary_" + $env:COMPUTERNAME + ".csv"
#Change server name and port number and $True if it is on SSL
[String]$updateServer1 = $env:COMPUTERNAME
[Boolean]$useSecureConnection = $False
[Int32]$portNumber =80
$updateid=(
'fb31138f-b6a5-499c-9eb6-5b5f9fff6bfd',
'86ac3cc3-e972-41a8-ac78-45bc5a950faa',
'5680ca8f-be92-4d13-8e4e-587aa462e838',
'57dbd57f-89b2-4abb-8582-14fc17870bb8',
'80bc2b42-a953-4096-8595-130e9a9c9fb9',
'652eea96-c2e8-4548-8f9a-40964e5e6a74'
)
# Load .NET assembly
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
# Connect to WSUS Server
$updateServer = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($updateServer1,$useSecureConnection,$portNumber)
write-host "<<<Connected sucessfully >>>" -foregroundcolor "yellow"
$computerscope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope
$updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$updatescope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::LatestRevisionApproved
$updatescope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
$updatescope.FromArrivalDate = [datetime]"1/1/2017"
$u=$updateServer.GetUpdates($updatescope )
$u=$updateServer.GetSummariesPerUpdate($updatescope,$computerscope)
foreach ($u1 in $u )
{
if ($updateid -contains $u1.UpdateId)
{
$needed= $u1.DownloadedCount + $u1.NotInstalledCount +$u1.InstalledPendingRebootCount
$Title= $updateServer.GetUpdate($u1.UpdateId).Title
$o= New-Object PSObject
$o | Add-Member NoteProperty Title $Title
$o | Add-Member NoteProperty Installed $u1.InstalledCount
$o | Add-Member NoteProperty Required $needed
$o | Add-Member NoteProperty Failed $u1.FailedCount
$o | Add-Member NoteProperty Notapplicable $u1.NotApplicableCount
$o | export-csv $outputfile -Append -NoTypeInformation
}
}
write-host "<<<Finished sucessfully >>>" -foregroundcolor "yellow"
trap
{
write-host "Error Occurred"
write-host "Exception Message: "
write-host $_.Exception.Message
write-host $_.Exception.StackTrace
exit
}
# EOF
2. Computers which require a specific update or a set of updates
##########################################################################
#Script to get the Report from WSUS for Computers which require a specific update or a set of updates
#Version 1.0 File Name Report_detailed.ps1
# Output Folder file path is $outputfile a
#Created by: Sudheesh Narayanaswamy
#Created for Any WSUS server
#Created on: 5/16/2017
#Run this script in the WSUS server
################################################################################
$outputfile = "C:\Temp\"
$outputfile = $outputfile + "Report_Detail_" + $env:COMPUTERNAME + ".csv"
#Change server name and port number and $True if it is on SSL
[String]$updateServer1 = $env:COMPUTERNAME
[Boolean]$useSecureConnection = $False
[Int32]$portNumber =80
$updateid=(
'fb31138f-b6a5-499c-9eb6-5b5f9fff6bfd',
'86ac3cc3-e972-41a8-ac78-45bc5a950faa',
'5680ca8f-be92-4d13-8e4e-587aa462e838',
'57dbd57f-89b2-4abb-8582-14fc17870bb8',
'80bc2b42-a953-4096-8595-130e9a9c9fb9',
'652eea96-c2e8-4548-8f9a-40964e5e6a74'
)
# Load .NET assembly
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
# Connect to WSUS Server
$updateServer = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($updateServer1,$useSecureConnection,$portNumber)
write-host "<<<Connected sucessfully >>>" -foregroundcolor "yellow"
$computerscope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope
$updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$updatescope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::LatestRevisionApproved
$updatescope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
$updatescope.FromArrivalDate = [datetime]"1/1/2017"
$Update=$updateServer.GetUpdates($updatescope )
foreach ($u1 in $Update)
{
if ($updateid -contains $u1.Id.UpdateId)
{
$Computers= $u1.GetUpdateInstallationInfoPerComputerTarget($ComputerScope)
$Title= $updateServer.GetUpdate($u1.Id.UpdateId).Title
foreach ($C1 in $Computers)
{
if ($C1.UpdateInstallationState -ne "Installed" -and $C1.UpdateInstallationState -ne "NotApplicable" )
{
$ComputerName= $updateServer.GetComputerTarget($C1.ComputerTargetId).FullDomainName
$o= New-Object PSObject
$o | Add-Member NoteProperty Title $Title
$o | Add-Member NoteProperty ComputerName $ComputerName
$o | Add-Member NoteProperty Status $C1.UpdateInstallationState
$o | export-csv $outputfile -Append -NoTypeInformation
}
}
}
}
write-host "<<<Finished sucessfully >>>" -foregroundcolor "yellow"
trap
{
write-host "Error Occurred"
write-host "Exception Message: "
write-host $_.Exception.Message
write-host $_.Exception.StackTrace
exit
}
# EOF
Hope This would be helpful
Sudheesh Narayanaswamy