Powershell – Exploiter rapidement une propriété d’utilisateur AD courant.

I. Présentation

Au sein de scripts de login, il est assez fréquent d’avoir besoin de traiter une information propre au compte d’utilisateur courant. (Autrement dit, celui avec lequel la session est  ouverte 😀 )

La variable la plus courante est probablement %USERNAME% (dans le contexte d’environnement traditionnel) ou $env:USERNAME en code Powershell. Hors, pour un compte d’utilisateur, particulièrement un compte déclaré dans Active Directory, les « propriétés » (ou attributs) sont beaucoup plus riches et intéressantes, pour peu qu’elles soient renseignées.

 

II. Explications

Pour récupérer des informations sur un objet Active Directory, dont une classe Utilisateur, le premier réflexe serait d’utiliser une requête, comme par exemple, récupérer la valeur  du dossier personnel de l’utilisateur.

$HomeDir = ([adsisearcher]"samAccountName=$env:USERNAME").findone().getdirectoryentry().homeDirectory.value

 

Ce code est parfaitement fonctionnel mais présente un inconvénient majeur du fait qu’il utilise le nom court de l’utilisateur, ce qui implique que la requête doit « balayer » toute l’arborescence AD pour trouver l’objet recherché et afficher l’information souhaitée.

Ce qui est dommage, vu que la requête est exécutée dans le contexte de ce fameux utilisateur.

 

III. L’astuce – Mixer l’outil whoami avec ADSI

L’astuce consiste à obtenir l’information du nom pleinement qualifié (FQDN) de l’utilisateur courant via la commande « whoami /fqdn » puis de l’associer au fournisseur Powershell « [ADSI]LDAP:// » et le tour est joué 🙂

Ce qui donne un code du genre :

$HomeDir = ([ADSI]"LDAP://$(whoami /fqdn)").Properties["homeDirectory"].Value

 

Ou plus simplement

$HomeDir = ([ADSI]"LDAP://$(whoami /fqdn)").homeDirectory

 

Faites le test sur un Active Directory de production ou avec un grand nombre d’utilisateurs. Le gain de temps est très appréciable 🙂

Bien à vous