1010 with monitoring systems.
1111
1212 Checks performed:
13- 1. WSUS Service Status (WsusService)
14- 2. WSUS Connection URL Validation
15- 3. IIS AppPool Status (WsusPool)
16- 4. SSL Certificate Check (when HTTPS is enabled)
17- 5. WSUS API Connectivity (Microsoft.UpdateServices.Administration)
18- 6. Database/API Query Validation (GetComputerTargetGroups)
19- 7. WSUS Content Directory Disk Space
20- 8. System Drive Disk Space
21- 9. Last Successful Synchronization Status
22- 10. Catalog and Content Synchronization Errors
23- 11. WSUS Self-Update Status
24- 12. Email Notification Failures (last 7 days)
25- 13. Update Installation Failures (last 7 days)
26- 14. Inventory Failures (last 7 days)
27- 15. Recent Event Log Errors (last 24 hours)
13+ 1. WSUS Service Status (WsusService) & WSUS Connection URL Validation
14+ 2. IIS AppPool Status (WsusPool)
15+ 3. SSL Certificate Check (when HTTPS is enabled)
16+ 4. WSUS API Connectivity (Microsoft.UpdateServices.Administration)
17+ 5. Database/API Query Validation (GetComputerTargetGroups)
18+ 6. WSUS Content Directory Disk Space
19+ 7. System Drive Disk Space
20+ 8. Last Successful Synchronization Status
21+ 9. Catalog and Content Synchronization Errors
22+ 10. WSUS Self-Update Status
23+ 11. Email Notification Failures (last 7 days)
24+ 12. Update Installation Failures (last 7 days)
25+ 13. Inventory Failures (last 7 days)
26+ 14. Recent Event Log Errors (last 24 hours)
2827
2928. PARAMETER WSUSServer
3029 WSUS server FQDN or hostname. Default: local computer FQDN
4746 Author : Fabian Niesen
4847 Filename : Get-WsusHealth.ps1
4948 Requires : PowerShell 5.1+, Windows Server 2012 R2+, WSUS installed
50- Version : 1.0
49+ Version : 1.1
5150 Updated : 30. November 2025
5251
5352.LICENSE
@@ -131,7 +130,7 @@ Function SendEmailStatus {
131130 Write-Warning " Failed to send email: $ ( $_.Exception.Message ) "
132131 }
133132}
134-
133+ $scriptversion = " 1.1 "
135134# HTML Style for email
136135$Style = " <Style>BODY{font-size:12px;font-family:verdana,sans-serif;color:navy;font-weight:normal;}" + " TABLE{border-width:1px;cellpadding=10;border-style:solid;border-color:navy;border-collapse:collapse;}" + " TH{font-size:12px;border-width:1px;padding:10px;border-style:solid;border-color:navy;}" + " TD{font-size:10px;border-width:1px;padding:10px;border-style:solid;border-color:navy;}</Style>"
137136$SmtpSubject = $SmtpSubject + " - WSUS Server: $WSUSServer "
@@ -178,8 +177,8 @@ try {
178177} catch {
179178 $results += New-CheckResult - Name ' IIS AppPool (WsusPool)' - Status ' Failed' - Message $_.Exception.Message
180179}
181-
182- # 2.1) SSL Certificate Check (only if UseSSL is enabled)
180+ # endregion
181+ # region 3 SSL Certificate Check (only if UseSSL is enabled)
183182if ($UseSSL ) {
184183 try {
185184 Import-Module WebAdministration - ErrorAction Stop | Out-Null
@@ -212,7 +211,7 @@ if ($UseSSL) {
212211 }
213212}
214213# endregion
215- # region 3 ) WSUS API connectivity (AdminProxy)
214+ # region 4 ) WSUS API connectivity (AdminProxy)
216215$wsus = $null
217216try {
218217 [void ][Reflection.Assembly ]::LoadWithPartialName(' Microsoft.UpdateServices.Administration' )
@@ -226,7 +225,7 @@ try {
226225 $results += New-CheckResult - Name ' WSUS API' - Status ' Failed' - Message $_.Exception.Message
227226}
228227# endregion
229- # region 4 ) Basic DB/API query (GetComputerTargetGroups) - ensures server side queries are functional
228+ # region 5 ) Basic DB/API query (GetComputerTargetGroups) - ensures server side queries are functional
230229try {
231230 if ($wsus -eq $null ) { throw " WSUS API object not available to run queries." }
232231 $groups = $wsus.GetComputerTargetGroups () # simple call to validate server-side operations
@@ -240,7 +239,7 @@ try {
240239 $results += New-CheckResult - Name ' WSUS DB/API Query' - Status ' Failed' - Message $_.Exception.Message
241240}
242241# endregion
243- # region 5 ) WSUS Directory Disk Space Check
242+ # region 6 ) WSUS Directory Disk Space Check
244243try {
245244 # Get WSUS content directory from WSUS API configuration
246245 $wsusContentPath = $null
@@ -290,7 +289,7 @@ try {
290289 $results += New-CheckResult - Name ' WSUS Disk Space' - Status ' Failed' - Message $_.Exception.Message
291290}
292291# endregion
293- # region 6 ) System Drive Disk Space Check
292+ # region 7 ) System Drive Disk Space Check
294293try {
295294 $systemDrive = $env: SystemDrive
296295 $diskSpace = Get-Volume - DriveLetter $systemDrive.TrimEnd (' :' ) - ErrorAction Stop
0 commit comments