Comment lister les rôles FSMO en PowerShell ?
I. Présentation
Lorsqu’il s’agit de lister les rôles FSMO afin d’obtenir le nom du contrôleur de domaine qui détient chacun des rôles, il y a plusieurs méthodes possibles. En effet, il est possible d’utiliser l’interface graphique à l’aide des outils d’administration, mais aussi d’utiliser l’outil ntdsutil en ligne de commande. De son côté, PowerShell offre une alternative supplémentaire et très pratique : découvrons dans ce chapitre comment obtenir des informations au sujet des rôles FSMO.
Le module Active Directory de PowerShell 4.0 intègre plusieurs cmdlets intéressants, dont deux qui nous permettent de récupérer facilement le maître d'opération pour chacun des rôles FSMO.
Pour rappel, il existe 5 rôles FSMO différents ayant chacun un maître d'opération unique, deux d'entre eux (Maître de schéma - Maître d'attribution des noms de domaine) au niveau de la forêt, les trois autres au niveau du domaine (Émulateur PDC - Maître RID - Maître d'infrastructure). Pour plus d’informations à ce sujet, je vous invite à lire mon cours sur les notions de base de l’Active Directory.
II. Lister les maîtres d'opérations (FSMO)
Passons à la manipulation de PowerShell, commencez par ouvrir une console. Nous devons utiliser deux cmdlets différents, car il y en a un qui va permettre de récupérer des informations au sujet des rôles FSMO uniques au niveau du domaine et un autre pour les deux rôles FSMO uniques au niveau de la forêt.
Pour lister les maîtres d'opérations définis au niveau de la forêt, on utilisera la commande Get-ADForest où l'on indiquera uniquement deux propriétés à afficher :
- Maître de schéma = SchemaMaster
- Maître d'attribution des noms de domaine = DomainNamingMaster
Ce qui donnera la commande suivante. Il n’est pas nécessaire de préciser le domaine si on exécute la commande directement depuis le contrôleur de domaine :
Get-ADForest | Format-Table SchemaMaster,DomainNamingMaster
L’information s’affiche tout naturellement à l’écran :
Concernant les 3 derniers rôles FSMO, on passera par l'utilisation de Get-ADDomain à la place de Get-ADForest, le principe de la commande reste le même.
- Émulateur PDC = PDCEmulator
- Maître RID = RIDMaster
- Maître d'infrastructure = InfrastructureMaster
Finalement, il suffit de remplacer Get-ADForest par Get-ADDomain et d’afficher les trois propriétés qui nous intéressent dans un tableau :
Get-ADDomain | Format-Table PDCEmulator,RIDMaster,InfrastructureMaster
Dans le cas où il y a plusieurs domaines dans la forêt, vous pouvez spécifier le nom du domaine cible de cette façon :
Get-ADDomain it-connect.local | Format-Table PDCEmulator,RIDMaster, InfrastructureMaster
De mon côté, cela donne le résultat suivant :
Pour obtenir directement le nom du serveur qui détient le rôle, pour le stocker dans une variable par exemple, vous pouvez utiliser cette méthode :
(Get-ADForest it-connect.local).SchemaMaster (Get-ADForest it-connect.local).DomainNamingMaster (Get-ADDomain it-connect.local).PDCEmulator (Get-ADDomain it-connect.local).RIDMaster (Get-ADDomain it-connect.local).InfrastructureMaster
Chaque commande ci-dessus va vous retourner le nom du contrôleur de domaine qui détient le rôle FSMO concerné.
L’idée est simple : on peut imaginer un script où l'on définit la valeur que doit avoir chaque maître d'opération, et, qu'on la compare à la valeur récupérée en production avec les commandes ci-dessus. Grâce à cette méthode, ce sera facile de voir s’il y a eu une modification du « maître » pour l’un des rôles FSMO. Dans ce cas, il faudra générer une alerte par e-mail ou dans votre système de supervision.