Oct 08 2010

Powershell: Replication AD

L’outil repadmin peut vous servir à surveiller la bonne réplication au sein de votre forêt Active Directory. Vous pouvez lire cet article pour avoir plus de détails, grâce à la commande “repadmin /replsum” on peut avoir le statut global de réplication au sein de nôtre forêt. L’information “largest delta” correspond au plus grand intervalle de réplication constaté entre le DC indiqué et l’un de ces partenaires pour l’ensemble des partitions AD répliquées par celui ci. Le nombre d’échecs de réplication pour l’ensemble des “Naming Context” (i.e. partitions AD) et partenaires de réplication nous est aussi donné.

Le but de notre script va être d’analyser la réplication entrante de chacun de nos DCs grâce à la commande “repadmin /replsum /bydest” puis d’analyser son contenu. Dans le cas où vous avez des RODC dans vôtre infrastructure ils apparaitront dans le résultat de la commande, contrairement au commutateur /bysrc, pour plus de détails lire ce post. Si pour un DC donné la valeur “largest delta” dépasse un seuil à définir ou que des échecs de réplication sont constatés, alors nous analyserons l’attribut msDS-ReplAllInboundNeighbors de l’objet RootDSE de ce contrôleur de domaine. Nous pourrons ainsi avoir le détail du partenaire de réplication qui pose problème et le “Naming Context” qui n’a pas bien répliqué. Il est aussi possible d’obtenir cette information avec la commande “replsum /showrepl %dc_name% /csv“, mais l’information contenue dans l’attribut msDS-ReplAllInboundNeighbors est au format XML et est donc aussi sympathique à manipuler via script.

Il existe déjà sur la toile un script qui fait à peu près la même chose et utilise la commande “repadmin.exe /showrepl * /csv”, vous pouvez le trouver sur le blog Technodrone, je propose dans ce post une autre méthode et une présentation des résultats différente.

Dans un premier temps nous allons donc analyser les informations renvoyées par notre commande repadmin et parser les résultats à l’aide des expressions régulières. Voici le résultat d’une commande “repadmin /replsum /bydest”.

Dans le résultat de cette commande seules les valeurs de “Destination DSA” (<DC>), “largest delta” (<Delta>) et “fails” (<fail>) qui est un nombre composé de deux chiffres nous intéresse. L’expression régulière qui va nous permettre de parser ces valeurs est donc:

[regex]$regex = '\s+(?<DC>\S+)\s+(?<Delta>\S+)\s+(?<fail>\d{1,2}\s)'

Dans le cas où un DC est non joignable une erreur nous est renvoyée à la dernière ligne, l’expression régulière qui va nous permettre de trouver nos données est:

[regex]$regex2 = '\s+(?<FAIL>\d{1,2}\S+)\s\-\s+(?<DC>\S+)'

Nous reste ensuite à parcourir le résultat de notre commande est utiliser $matches pour extraire l’information désirée. Pour un exemple détaillé de cette méthode vous pouvez lire cet article qui traite le cas de la commande “route print” ou bien celui ci qui traite la commande “netstat”.

Le code utilisé pour récupérer nos informations est donc le suivant:

$repadmin = repadmin /replsum /bydest
$repadmin | ForEach-Object {
 
if ( $_ -match $regex ) {
$process = "" | Select-Object DC, Delta, fail
$process.dc = $matches.dc
$process.Delta = $matches.Delta
$process.fail = [int]($matches.fail)
$process
}
 
Elseif ( $_ -match $regex2 ) {
$process2 = "" | Select-Object DC,fail
$process2.fail = $matches.fail
$process2.DC = $matches.DC
$process2
}
}

Le résultat retourné par “largest delta” est au format XXd:XXh:XXm:XXs il nous suffit donc de parser ce résultat et d’utiliser le cmdlet New-Timespan pour avoir le résultat en minutes. Si cette valeur excède un seuil en minutes à définir ou que le nombre d’échecs est supérieur à 0 ($process.fail) alors l’attribut msDS-ReplAllInboundNeighbors du DC concerné est lu.

La méthode utilisée est la même que celle décrite sur le blog Active Directory Powershell pour lire l’attribut ms-DS-Repl-AttributeMetaData qui est aussi au format XML. Afin de pouvoir lire l’attribut msDS-ReplAllInboundNeighbors de l’objet RootDSE sur tous les DCs de votre forêt via Powershell il faut que Active Directory Web Services (inclus dans 2008R2) soit installé sur ceux ci.

Voici donc le resultat obtenu lorsque l’on lance le script repl-status.ps1 la valeur $LargestDeltaTreshold exprimée en minutes est égale à 20:

Pour télécharger le script complet c’est ici:

This post is also available in: Anglais

No Comments

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

*

WordPress Themes

Blossom Icon Set

Software Top Blogs