$MAX_WARN_DAYS=60 $MAX_ERROR_DAYS=120 $MAX_DAYS_HACK=100000 $myVers=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion") $productName=$myVers.ProductName if ($releaseId=$myVers.ReleaseId) { $releaseId = "($releaseId)" } else { $releaseId='' } $currentBuild = $myVers.CurrentBuild $ubr = $myVers.UBR # Using a COM object sometimes slows to a crawl #$windowsUpdateObject = New-Object -ComObject Microsoft.Update.AutoUpdate #$lastupdate = $windowsUpdateObject.Results.LastInstallationSuccessDate $hotfixes = (Get-HotFix | Sort-Object -ErrorAction SilentlyContinue -Descending InstalledOn) $lastupdate = $hotfixes[0].InstalledOn $now = Get-Date $ts = New-TimeSpan -Start $lastupdate -End $now # Check_MK is 1 - Warn, 2 - Error, 0 - Ok, 3 - Unknown # Handle strange deltas $days_since = $ts.Days if (($days_since -gt $MAX_DAYS_HACK) -or ($days_since -le 0)) { $days_since = 0 } if ($days_since -gt $MAX_ERROR_DAYS) { $cmk_ret = 2 } elseif ($days_since -gt $MAX_WARN_DAYS) { $cmk_ret = 1 } else { $cmk_ret = 0 } $msg = '{0} Windows-LastUpdate - Last update {1} days ago, {2}' -f $cmk_ret, $days_since, "$productName $releaseId [$currentBuild.$ubr]" Write-Host $msg