Récupérer rapidement les privilèges Citrix d’un compte ActiveDirectory

Contexte

Si vous avez défini vos administrateurs Citrix avec des groupes AD et que vous faites une recherche avec get-xaadministraor et un nom d’utilisateur, vous avez surement récupérer une erreur du type :

Get-XAAdministrator : Cannot find administrator USER (0x80000024)
Au niveau de ligne : 1 Caractère : 20
+ get-xaadministrator <<<< user
+ CategoryInfo : InvalidResult: (user:String) [Get-XAAdministrator], CitrixException
+ FullyQualifiedErrorId : GetAdminUidByName,Citrix.XenApp.Commands.GetAdministratorCmdlet

A priori, la fonction Get-xaadministrator ne vérifie pas l’appartenance à des groupes pour notre administrateur passé en paramètre. Vous me direz de toute façon, ce n’est pas son rôle à cette fonction!
Afin de compliquer notre tache, le serveur ne possède pas le module ActiveDirectory, nous allons donc devoir trouver une autre méthode pour récupérer les informations sur notre utilisateur.

DirectoryServices et adsi

DirectoryServices va nous permettre d’effectuer une requête LDAP sur l’ActiveDirectory et ainsi récupérer notre utilisateurs.

$Searcher = New-Object DirectoryServices.DirectorySearcher
$Searcher.Filter = '(&(objectCategory=user)(sAMAccountName=MyUser))'
$Searcher.SearchRoot = 'LDAP://dc=ds,dc=example,dc=com'
$Searcher.FindAll()

Ensuite, nous utilisons l’accelerator [adsi] pour récupérer les informations sur notre utilisateur  dans notre cas, nous récupérons le nom des groupes auxquels il appartient.

$user = [adsi]$Searcher.FindAll()[0].Path
$groups = @($user.memberOf | % { ([adsi]"LDAP://$_").Cn })

Récupérer la liste des admins Citrix et obtenir le groupe d’appartenance de l’utilisateur.

Pour récupérer la liste des noms des groupes Admin de Citrix, nous allons utiliser Get-xaadministrator :

$admin = @(Get-xaadministrator | select AdministratorName | % { $_.AdministratorNAme.Split()[0] })

Ensuite nous n’avons plus qu’à obtenir l’intersection de nos deux listes

compare-object  $groups $admin -ExcludeDifferent -IncludeEqual -Passthru

Ensuite libre à vous de faire ce que vous voulez avec ce nom de groupe 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *