PowerShell Code
Get-ADUserReport.ps1
View-only PowerShell code for review.
<#
.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."