Powershell/NRPE/Check_wsus_critical_updates.ps1
2023-07-04 12:59:44 +02:00

53 lines
2.0 KiB
PowerShell

# This is a little basic script I have written to query a WSUS server
# about the updates needed by the system.
#
# It will only return a Critical status if there are any Critical Security Updates,
# or Critical Updates waiting to be applied.
#
# I by no mean pretend to be a profesionnal scripter, so feel free
# to modify as you see fit!
#
# Written by: Alexandre Beauclair
# Date: April 12th 2012
#Declaring base variables. You can change the $wsusserver value if needed.
$wsusserver = "localhost"
$securityCritical = 0
$criticalUpdates = 0
#Load required assemblies
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
#Create necessary objects
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($wsusserver,$False)
$updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
#Specify we are looking for updates which are Not Approved, and Not Installed.
$updatescope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::NotApproved
$updatescope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
#Find how many updates are available.
$checkSecurityCritical = $wsus.GetUpdates($updatescope) | where {$_.UpdateClassificationTitle -eq "Security Updates"} | ft MsrcSeverity -AutoSize | FIND /c " Critical"
$checkCriticalUpdates = $wsus.GetUpdates($updatescope) | where {$_.UpdateClassificationTitle -eq "Critical Updates"} | ft UpdateClassificationTitle | FIND /c "Critical Updates"
$securityCritical += $checkSecurityCritical
$criticalUpdates += $checkCriticalUpdates
#Return message and exit code accordingly.
if(($securityCritical -gt 0) -or ($criticalUpdates -gt 0)){
Write-Host "CRITICAL - There are updates waiting to be applied. Critical Updates: $criticalUpdates Critical Security Updates: $securityCritical"
exit 2
}else{
Write-Host "OK - There are no critical updates waiting to be applied."
exit 0
}