PowerShell – Tester si un objet AD existe

Read article in english here.

Point d’attention sur le module AD

Lors du développement de scripts PowerShell pour Active Directory, il est souvent utile de tester si un objet AD (utilisateur, ordinateur, groupe) existe ou non.

Premièrement, il faut installer le module Active Directory.

Sur les dernières versions de PowerShell livrées avec Windows Server 2012 R2, 2016 et 2019, la non-existence d’un objet dans l’AD provoque une erreur qu’il est possible de gérer avec un try/catch.

Cependant, le fonctionnement est différent sur les anciennes versions. La gestion des erreurs bloquantes en PowerShell étant parfois capricieuses, on pourrait tenter en ajoutant paramètre -ErrorAction Stop pour forcer l’arrêt… belle tentative mais cela ne fonctionne pas.

Cet article présente donc les différents méthodes afin tester l’existence d’un utilisateur dans un Active Directory avec PowerShell en fonction de la version.

Sur un serveur 2012/2012R2/2016/2019 ou Windows 8/8.1/10

Avec PowerShell 3.0 et supérieur, il est possible d’utiliser la commande Get-ADUser (ou Get-ADComputer ,Get-ADGroup).

En cas d’erreur, une exception sera levée, il est donc possible de la positionner dans un try/catch :

Sur Windows 2008/2008R2 ou Windows 7

Pour les anciennes versions de PowerShell (1.0 ou 2.0), la commande Get-ADUser (Get-ADComputer, Get-ADGroup, etc.) ne lève pas d’erreur d’exécution, donc la partie catch n’est jamais exécutée. Cela pose donc un problème évident de non gestion des erreurs.

Pour pallier ce problème, vous pouvez utiliser l’une des méthodes ci-dessous.

Méthode 1 – caster en array

Caster la valeur retournée en array en utilisant la notation @() et vérifier la propriété  .Count. Si elle est égale à 0, l’utilisateur n’existe pas, sinon il existe :

Méthode 2 – caster en booléen

Caster la valeur retournée en booléen avec la notation [bool]. Un booléen peut être TRUE ou FALSE (respectivement représenté par 1 ou 0).

Leave a Reply

eighteen − four =

Close Menu