53 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 |