La boite de dialogue Directory Object Picker permet à un utilisateur de choisir un ou plusieurs objets de type utilisateur, groupe ou ordinateur dans un domaine ou sur un ordinateur en groupe de travail. Un article du MSDN explique comment mettre en œuvre cet objet en C++. J'ai trouvé sur Codes-Sources une adaptation de l'exemple Microsoft en .NET. J'ai de mon coté adapté cet exemple pour fabriquer un assembly qui puisse être aisément utilisé en PowerShell et notament ramener des attributs pour les objets de l'annuaire.
-
Le premier exemple illustre l'usage local, sur un poste workgroup.
Le script suivant charge l'assembly DirectoryObjectPicker.dll et demande l'affichage de la boite de dialogue de recherche qui permet de sélectionner des objets dans la base de compte locale. la variable $res contient l'objet ou la liste d'objets désirés.
# Obj-Add-Type-ADObjectPicker.PS1
Clear-Host
Add-Type -Path "C:\silogix\DirectoryObjectPicker.dll"
$ADObjectPicker = New-Object DirectoryObjectPicker.Picker
# Exemple utilisant les valeurs par défaut
$Res = $ADObjectPicker.ShowDialog()
$Res
Affiche (après séléction d'un utilisateur) :

Ce qui donne comme résultat pour l'affichage de la variable $res :
ADsPath : LDAP://<SID=01050000000000051500000097b5555f02e311bef8182f66e9030000>
ObjectClass : User
UPN :
ScopeType : TARGET_COMPUTER
htAttributes : {}
-
Le second exemple illustre un usage sur un poste domaine.
Le script suivant charge l'assembly DirectoryObjectPicker.dll et demande l'affichage de la boite de dialogue de recherche qui permet de sélectionner des objets dans l'annuaire. Il est possible de préciser la liste des attributs que l'on souhaite retrouver pour chaque objet sélectionné. La variable $res contient l'objet ou la liste des objets désirés avec leurs attributs.
# Obj-Add-Type-ADObjectPicker.PS1
Clear-Host
Add-Type -Path "C:\temp\DirectoryObjectPicker.dll"
$ADObjectPicker = New-Object DirectoryObjectPicker.Picker
# Exemple utilisant les valeurs par défaut
$attributes = "samAccountName","sn", "distinguishedName", "givenName"
$Res = $ADObjectPicker.ShowDialog($true, "WM2008R2ENT", $attributes)
$Res
write-host "------------------------------------------"
$Res | select -Property RDN -ExpandProperty htAttributes
Affiche :

Ce qui donne comme résultat pour l'affichage de la variable $res :
RDN : Jean Paul Blanc
ADsPath : LDAP://<SID=010500000000000515000000f533b8b9084cb230e5577fc451040000>
ObjectClass : user
UPN : jpb@dom.fr
ScopeType : GLOBAL_CATALOG
htAttributes : {givenName, samAccountName, sn, distinguishedName}
------------------------------------------
Key : givenName
Value : Jean Paul
Name : givenName
Key : samAccountName
Value : jpb
Name : samAccountName
Key : sn
Value : Blanc
Name : sn
Key : distinguishedName
Value : CN=Jean Paul Blanc,OU=MonOu,DC=dom,DC=fr
Name : distinguishedName