Créer un système de journalisation centralisé pour suivre les résultats des vérifications de santé au fil du temps et mettre en œuvre des alertes pour les problèmes critiques.
# Créer une fonction de journalisation centralisée
function Write-ADHealthLog {
param(
[string]$Message,
[string]$Level = "INFO",
[string]$LogPath = "C:\logs\ADHealth.log"
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "[$timestamp] [$Level] $Message"
# S'assurer que le répertoire de journalisation existe
$logDir = Split-Path $LogPath -Parent
if (!(Test-Path $logDir)) {
New-Item -Path $logDir -ItemType Directory -Force
}
# Écrire dans le fichier de journal
Add-Content -Path $LogPath -Value $logEntry
# Écrire également dans le journal des événements pour les problèmes critiques
if ($Level -eq "ERROR" -or $Level -eq "CRITICAL") {
Write-EventLog -LogName "Application" -Source "AD Health Monitor" -EventId 1001 -EntryType Error -Message $Message
}
}
Créer une fonction d'alerte pour les problèmes critiques :
function Send-ADHealthAlert {
param(
[string]$AlertMessage,
[string]$Severity = "High",
[array]$Recipients = @("admin@yourdomain.com")
)
$subject = "[AD ALERT - $Severity] Problème de santé Active Directory"
$body = @"
Alerte de santé Active Directory
Gravité : $Severity
Horodatage : $(Get-Date)
Contrôleur de domaine : $env:COMPUTERNAME
Détails du problème :
$AlertMessage
Veuillez enquêter immédiatement.
"@
try {
Send-MailMessage -To $Recipients -From "adalert@yourdomain.com" -Subject $subject -Body $body -SmtpServer "mail.yourdomain.com"
Write-ADHealthLog "Alerte envoyée avec succès : $AlertMessage" "INFO"
}
catch {
Write-ADHealthLog "Échec de l'envoi de l'alerte : $($_.Exception.Message)" "ERROR"
}
}
Intégrer la journalisation dans vos vérifications de santé :
# Exemple d'intégration avec les résultats de DCDiag
$dcdiagResults = dcdiag /test:DNS /test:FSMOCheck /v
if ($dcdiagResults -match "failed") {
$failedTests = $dcdiagResults | Where-Object { $_ -match "failed" }
$alertMessage = "Les tests DCDiag ont échoué:`n" + ($failedTests -join "`n")
Write-ADHealthLog $alertMessage "ERROR"
Send-ADHealthAlert -AlertMessage $alertMessage -Severity "High"
}
else {
Write-ADHealthLog "Tous les tests DCDiag ont réussi" "INFO"
}
Tester le système de journalisation et d'alerte :
# Tester la journalisation
Write-ADHealthLog "Entrée de journal de test" "INFO"
# Tester l'alerte
Send-ADHealthAlert -AlertMessage "Message d'alerte de test" -Severity "Low"
# Vérifier le fichier de journal
Get-Content "C:\logs\ADHealth.log" -Tail 5
Astuce pro : Configurez la rotation des journaux pour éviter que les fichiers de journal ne deviennent trop volumineux. Utilisez PowerShell pour archiver automatiquement les journaux de plus de 30 jours.