<# .SYNOPSIS Checks the health of specified Domain Controllers. .DESCRIPTION Tests connectivity, verifies the NTDS service status, checks replication health, and reports the last reboot time for each specified Domain Controller. .EXAMPLE .\DCPreboot-HealthCheck.ps1 .INPUTS None. .OUTPUTS Screen output showing DC health results. .NOTES Requires the ActiveDirectory module and appropriate permissions. Update the $servers array with the Domain Controllers you want to check. #> Import-Module ActiveDirectory -ErrorAction Stop $servers = @( "DC_Name_1.DCnameonyourdomain.net", "DC_Name_2.DCnameonyourdomain.net", "DC_Name_3.DCnameonyourdomain.net" ) foreach ($server in $servers) { Write-Host "Checking health of $server..." # Test connectivity if (-not (Test-Connection -ComputerName $server -Count 1 -Quiet)) { Write-Host "$server is not responding to ping." Write-Host "-------------------------------------------" continue } Write-Host "$server is responding to ping." # Check NTDS service try { $service = Get-CimInstance -ClassName Win32_Service -ComputerName $server -Filter "Name='NTDS'" -ErrorAction Stop if ($null -eq $service) { Write-Host "NTDS service not found on $server." Write-Host "-------------------------------------------" continue } if ($service.State -ne "Running") { Write-Host "NTDS service is not running on $server (Status: $($service.State))." Write-Host "-------------------------------------------" continue } Write-Host "NTDS service is running on $server." } catch { Write-Host "Unable to check NTDS service on $server. Error: $($_.Exception.Message)" Write-Host "-------------------------------------------" continue } # Check replication health try { $replicationHealthy = $true $partners = Get-ADReplicationPartnerMetadata -Target $server -ErrorAction Stop if (-not $partners) { Write-Host "No replication partner metadata returned for $server." $replicationHealthy = $false } else { foreach ($partner in $partners) { if ($partner.LastReplicationResult -ne 0) { $replicationHealthy = $false Write-Host "Replication issue detected with partner $($partner.Partner) on $server. LastReplicationResult: $($partner.LastReplicationResult)" } } } if ($replicationHealthy) { Write-Host "Replication is healthy on $server." } else { Write-Host "Replication is NOT healthy on $server." } } catch { Write-Host "Unable to check replication health on $server. Error: $($_.Exception.Message)" } # Get last reboot time try { $os = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $server -ErrorAction Stop $lastBoot = $os.LastBootUpTime $uptimeDays = (New-TimeSpan -Start $lastBoot -End (Get-Date)).Days Write-Host "Last reboot time for ${server}: $lastBoot ($uptimeDays days ago)" } catch { Write-Host "Unable to retrieve last reboot time for ${server}. Error: $($_.Exception.Message)" } Write-Host "Health check completed for $server." Write-Host "-------------------------------------------" } Write-Host "All specified DCs have been checked."