Vérifier les réplications Active Directory

Envoyer

Sommaire

Active Directory Replication Status Tool

Depuis quelques semaines, Microsoft nous propose un nouvel outil pour la surveillance des réplications Active Directory. Un digne remplaçant au fameux outil REPLMON (replication monitor), un peu plus « user friendly » que la commande « repadmin /showrepl * /csv ». L’outil est Active Directory Replication Status Tool.

Pour pouvoir l’utiliser, il suffit simplement de disposer du Framework .Net 4 et d’un poste intégré à un domaine Active Directory (seul Windows 2000 n’est pas supporté).

Lorsque vous lancez l’outil, vous avez la possibilité de surveiller les réplications au niveau de la forêt (Forest), d’un domaine spécifique (Domain), par le biais d’une découverte automatique (Select Targets) ou par un import (Load Exported Data Set). Il suffit de cliquer sur « Refresh Replication status » pour lancer l’analyse.

 

 

 

 

 

 

 

 

 

Grâce à  Active Directory Replication Status Tool , vous avez la possibilité de vérifier rapidement que toutes les réplications sont opérationnelles  grâce à un code couleur clair et un filtrage rapide des résultats.

 

 

 

 

 

 

 

Vous avez également la possibilité de pouvoir consulter rapidement la documentation Technet relative à la moindre erreur remontée par l’outil depuis l’onglet « Replication Status Viewer ».

 

 

 

 

 

 

 

 

Autre point extrêmement intéressant est la possibilité de réaliser un export des données collectées dans le cadre d’une analyse hors-ligne ultérieure et de la réimporter à l’aide de l’option « Load Exported Data Set ».

 

 

 

 

 

 

 


Automatiser la notification avec Repadmin

La commande « Repadmin /showrepl * /csv » perd un peu de sa substance avec ce nouvel outil. Nous pouvons toutefois continuer à nous appuyer dessus pour utiliser un script d’automatisation d’envoi de rapports. Cela vous permet de pouvoir surveiller de manière automatique et régulière les réplications Active Directory.

Le script que nous vous proposons permet de formater l’export réalisé à l’aide de la commande « repadmin /showrepl * /csv » au format HTML, avec un classement des résultats par statut (« Error », « Warning » ou « Success ») et d’envoyer le tout par message électronique.

#========================================================================
# Created on:   24/08/2012
# Created by:   AUGAGNEUR Alexandre 
# Filename:     Repadmin-ShowRepl-HTMLReports.ps1
#
# Description:    Generate HTML reports based on 
#                "repadmin /showrepl * /csv" command return,
#                format it and send it by email
#========================================================================


###################################################
#        VARIABLES
###################################################

# Path of CSV/HTML exports
$ExportPath = "c:\temp"

# Path of Repadmin binary (only necessary if not found in $env:path)
$RepadminExec = $null

# Random name of CSV/HTML Export
$BaseFilename = "Repadmin-"+(Get-Date -Format yyMMdd)+"-"+(Get-Random)
$CSVFilename = $BaseFilename+".csv"
$HTMLFilename = $BaseFilename+".html"

# CSV Headers
$Header = "showrepl_COLUMNS","Destination DSA Site","Destination DSA","Naming Context","Source DSA Site","Source DSA", `
 "Transport Type","Number of Failures","Last Failure Time","Last Success Time","Last Failure Status"

# HTML Style
$style = @"
 <style>
 BODY{font-family:"Segoe UI"}
 P{text-decoration:underline;text-indent:40px;font-size:20px;color:DarkSlateGray;font-weight:bold}
 TABLE{border-width: 2px;border-style: solid;border-color: Black;border-collapse: collapse;}
 TABLE.error{border-color:red}
 TABLE.warning{border-color:darkorange}
 TABLE.success{border-color:green}
 TH{border-width: 2px;padding: 0px;border-style: solid;padding:5px}
 TD{border-width: 1px;padding: 0px;border-style: solid;text-align:center}
 TH.error{border-color:red;background-color:salmon}
 TH.warning{border-color:darkorange;background-color:orange}
 TH.success{border-color:green;background-color:limegreen}
 TD.error{border-color: red}
 TD.warning{border-color:darkorange}
 TD.success{border-color:green}
 </style>
"@

# Email notification parameters
$Sender = "sender.at.corpnet.net"
$Recipient = "recipient.at.corpnet.net" # You can specify an array if needed 
$Server = "smtp.corpnet.net"


###################################################
#        FUNCTIONS
###################################################

function EmailNotification($Sender, $Recipient, $Server, $Subject, $Body)
{
 $SMTPclient = new-object System.Net.Mail.SmtpClient $Server

 # SMTP Port (if needed)
 # $SMTPClient.port = 587

 # Enabling SSL (if needed)
 # $SMTPclient.EnableSsl = $true

 # Specify authentication parameters (if needed)
 # $SMTPAuthUsername = "login"
 # $SMTPAuthPassword = "password"
 # $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPAuthUsername, $SMTPAuthPassword)

 $Message = new-object System.Net.Mail.MailMessage
 $Message.From = $Sender
 $Recipient | %{ $Message.To.Add($_) }
 $Message.Subject = $Subject
 $Message.Body = $Body
 $Message.IsBodyHtml = $true
 
 $SMTPclient.Send($Message)
}


###################################################
#        MAIN
###################################################

# Construct CSV file full path
$CSVExport = Join-Path $ExportPath $CSVFilename

# Find repadmin binary if not defined
if ( !($RepadminExec) )
{
 foreach ( $path in ($env:path).split(";") ) 
 { 
 if (Test-Path $path\repadmin.exe)
 {
 $RepadminExec = "$path\repadmin.exe"
 }
 }
}

if ( $RepadminExec )
{
 # Command to generate replications status
 $StrCmd = "$RepadminExec /showrepl * /csv"
 
 # Generate CSV output
 Invoke-Expression $StrCmd | Out-File $CSVExport
 
 if ( Test-Path $CSVExport )
 {
 $ReplicationsState = Import-Csv -Path $CSVExport -Header $Header -Delimiter ","

 $ServersInError = @()
 $ErrorContent = @()

 # Filtering error messages
 $ReplicationsState | Where-Object { $_."showrepl_COLUMNS" -match "showrepl_ERROR" } | %{
 if ($_.showrepl_COLUMNS -match "showrepl_ERROR") {
 $ServersInError += $_."Destination DSA"
 $ErrorContent += $_
 } 
 }

 # Format errors content
 if ( $ErrorContent )
 {
 $MailObject="AD REPLICATIONS STATUS - $(Get-Date -Format yy/MM/dd) - error(s) found"

 $MailBody += $ErrorContent | Select-Object -Property "Destination DSA",@{ Name="Error Message"; Expression={ $_."Naming Context" } } | ConvertTo-Html -As table -Fragment -PreContent "<p>AD Replications status with errors</p>" -PostContent "<br><br>" | Out-String
 $MailBody = $MailBody.Replace("<th>","<therror"">")
 $MailBody = $MailBody.Replace("<td>","<tderror"">")
 $MailBody = $MailBody.Replace("<table>","<tableerror"">")
 }
 
 # Filtering warning messages
 $WarningContent = $ReplicationsState | Where-Object {  @("showrepl_ERROR","showrepl_COLUMNS") -notcontains $_."showrepl_COLUMNS" -and $_."Last Failure Status" -ne 0 }  
 
 # Format warning content
 if ( $WarningContent )
 {
 if (!$MailObject)
 {
 $MailObject="AD REPLICATIONS STATUS - $(Get-Date -Format yy/MM/dd) - warning(s) found"
 }
 
 $MailBody += $WarningContent | Select-Object -ExcludeProperty "showrepl_COLUMNS","Transport Type" -Property * | ConvertTo-Html -As table -Fragment -PreContent "<p>AD Replications status with warning</p>" -PostContent "<br><br>" | Out-String
 $MailBody = $MailBody.Replace("<th>","<thwarning"">")
 $MailBody = $MailBody.Replace("<td>","<tdwarning"">")
 $MailBody = $MailBody.Replace("<table>","<tablewarning"">")
 }

 # Filtering success messages (uncomment the line if you want to see them in the email report)
 # $SuccessContent = $ReplicationsState | Where-Object { @("showrepl_ERROR","showrepl_COLUMNS") -notcontains $_."showrepl_COLUMNS" -and $_."Last Failure Status" -eq 0} 

 # Format success content
 if ( $SuccessContent )
 {
 if (!$MailObject)
 {
 $MailObject="AD REPLICATIONS STATUS - $(Get-Date -Format yy/MM/dd) - OK"
 }
 
 $MailBody += $SuccessContent | select-object -ExcludeProperty "showrepl_COLUMNS","Transport Type" -Property * | ConvertTo-Html -As table -body "<p>AD Replications status with success</p>" -PreContent $style | Out-String
 $MailBody = $MailBody.Replace("<th>","<thsuccess"">")
 $MailBody = $MailBody.Replace("<td>","<tdsuccess"">")
 $MailBody = $MailBody.Replace("<table>","<tablesuccess"">")
 }

 # Generate HTML file (if wanted)
 # $HTMLExport = Join-Path $ExportPath $HTMLFilename
 # ConvertTo-Html -Head $style -body $MailBody -Title $MailObject | Out-File $HTMLExport
 
 if ( $MailBody )
 {
 EmailNotification $Sender $Recipient $Server $MailObject (ConvertTo-Html -Head $style -Body $MailBody -Title $MailObject | Out-String)
 }
 }
 }

L’avantage avec ce type de solution est que vous pouvez être rapidement informé d’un problème de réplication de manière automatique. Ci-dessous, vous avez des exemples de rapports envoyés par message électronique.

Mise à jour le Dimanche, 02 Septembre 2012 17:26  

Commentaires 

 
0 #1 31-01-2013 10:35
Bonjour,
Merci pour la fonction de message à plusieurs destinataires. C'est génial !
 
 
0 #2 Gregorio 19-10-2014 11:10
Odzież
reklamowa: http://www.youtube.com/watch?v=jceZEYDutUc
wi fi
aol broadband
aaa com
maids
educational
federal consolidation loan
 

Ajouter un Commentaire

Code de sécurité
Rafraîchir