Powershell: Restaurer objet AD avec appartenance de groupes
Nous allons voir dans cet article comment restaurer un objet en Powershell avec son appartenance de groupes. Pour cela vous aurez besoin d’avoir sur votre domaine d’un site de lag. Cette méthode ne vous sert à rien si le niveau fonctionnel de votre domaine est 2008R2 et que vous avez activé la corbeille AD, d’ailleurs les Cmdlets Microsoft vous permettent de restaurer un objet très facilement une fois que vous avez activé cette fonction.
La méthode décrite fonctionne à partir de Windows 2003 server en réanimant les objets à partir du Tombstone, votre console d’administration doit être au minimum sous Windows XP, donc pas besoin de RSAT (Windows 7 et 2008 server), ceci en utilisant les Cmdlets Quest. Vous avez peut être remarqué dans la rubrique “latest AD news“ du blog que la version 1.4 de ces Cmdlets était sortie il y a quelques jours. L’inconvénient de la méthode est qu’elle n’est surement pas supportée, pour les “best practices” c’est ici, et elle nécessite une modification du schéma. Elle est adaptée dans le cas d’une suppression de quelques comptes, l’avantage est la rapidité de restauration des objets: Pas de longue procédure d’authoritative restore à lancer, lancer le script suffit.
Une fois un objet effacé il se retrouve donc dans le Tombstone, le problème est que certains attributs de l’objet sont définitivement effacés, dont un très important: Le mot de passe de l’objet ordinateur ou utilisateur. Afin d’empêcher cet effacement définitif et avoir l’attribut conservé lors de la restauration il vous faut modifier vôtre schéma: Pour cela modifier l’attribut SearchFlags de la valeur CN=Unicode-Pwd,CN=Schema,CN=Configuration,DC=domain comme décrit dans le post de Michael Pietroforte. Vous pouvez donc configurer le schéma afin de ne pas effacer définitivement les attributs que vous considérez comme importants une fois un objet effacé.
Malheureusement vous ne pouvez pas modifier le schéma afin que l’appartenance de groupes d’un objet soit conservée une fois l’objet effacé et placé dans le Tombstone, c’est la où intervient le site de lag. Ce site n’est généralement composé que d’un seul DC, la plage de réplication possible est volontairement plus petite sur ce site (par exemple une seule fois par jour entre minuit et 0h30), de façon à ce que les effacements d’objets ne soient pas tout de suite répliqués. Vous pourrez donc lire les appartenances de groupes de l’objet sur le DC de ce site, car l’objet existe toujours, puis réinjecter les appartenances de groupes à votre objet une fois celui ci réanimé du Tombstone.
La commande avec les Cmdlets Quest pour réanimer un objet utilisateur du Tombstone et l’activer est la suivante:
Get-QADUser -SamAccountName $AccountRestore | Restore-QADDeletedObject | Enable-QADUser ....... |
$AccountRestore est le SamAccountName de l’objet utilisateur à réanimer, procéder de même pour un objet ordinateur avec Get-QADComputer, pour un groupe il vous suffit de restaurer l’objet et d’utiliser Get-QADGroup, par contre pas besoin de l’activer…
Maintenant pour un utilisateur il vous faut lire sur le DC situé sur le site de lag les groupes dont le compte était membre et ré-injecter ces informations dans le compte qui vient d’être réanimé:
.... | Get-QADMemberof -service $DC_LAG_FQDN | foreach { if($_.name -ne "Domain Users"){Add-QADGroupMember -service $DC_FQDN $_ -Member $AccountRestore}} |
$DC_LAG_FQDN est la variable qui permet de se connecter au DC de lag, puis on se reconnecte sur $DC_FQDN (DC où l’objet est effacé) et l’on lui ajoute tous les groupes lus précédemment. Tous les groupes sauf “Domain users” car l’objet restauré est déjà membre de ce groupe. Le même principe est à appliquer pour les objets ordinateur, exclure “Domain computers”.
En ce qui concerne les groupes c’est un peu plus compliqué: Il est constitué de membres et peut être membre d’autres groupes. Donc il faut traiter cet ajout dans “membres” et “membre de” l’un après l’autre:
.... | %{Get-QADMemberof -service $DC_LAG_FQDN $_ | foreach { Add-QADGroupMember -service $DC_FQDN -Member $AccountRestore} ; {Get-QADGroupMember -service $DC_LAG_FQDN $_ | Add-QADMemberOf -service $DC_FQDN -Group $AccountRestore} |
Restaurer des objets avec leur appartenance de groupes peut donc se faire en une seule ligne grâce à PowerShell. Vous trouverez ci dessous le script .ps1 complet:
Celui ci va vous permettre de restaurer les objets utilisateurs, ordinateurs et groupes. Il vous suffit juste de modifier les variables suivantes du script:
- $Domain: Nom NetBios de votre domaine.
- $DC_FQDN: FQDN d’un DC sur lequel l’objet est effacé.
- $DC_LAG_FQDN: FQDN de votre DC sur le site de lag.
- $AdminAD: Votre compte d’administration.
Une fois le script lancé, il vous faut choisir quel type d’objet restaurer: 1 pour utilisateur, 2 pour ordinateur et 3 pour groupe. Ensuite le mot de passe de votre compte d’administration vous est demandé, finalement le nom du compte à restaurer.
Des évolutions peuvent être apportées à ce script: Par exemple, si vous n’avez pas de site de lag, on pourrait interroger l’ensemble de vos DCs et voir si sur l’un d’eux l’objet n’est pas encore effacé. Désactiver la réplication entrante sur ce DC, grace à repadmin.exe. De cette manière l’effacement ne sera pas répliqué, lire les appartenances de groupes de l’objet, puis ne pas oublier de réactiver la réplication sur le DC une fois l’objet complètement restauré.
This post is also available in: Anglais