Identifier les groupes de l’utilisateur courant avec PowerShell

Envoyer Imprimer PDF

Je vais vous montrer rapidement comment vérifier qu’un utilisateur appartient à un groupe en PowerShell. Cela vous sera sans doute utile pour la mise en place de login script en PowerShell et abandonner les .bat, .kix et tutti quanti.

Premièrement on récupère l’utilisateur Windows courant :

$CurrentWinId = [System.Security.Principal.WindowsIdentity]::GetCurrent()

 

L’objet WindowsIndentity contient la propriété « Groups » listant l’ensemble des appartenances de l’utilisateur. Par contre,  la liste retourne uniquement les groupes par leur SID.

 

Du coup, vous avez deux solutions. La première solution consiste à réaliser une translation SID/Nom à l’aide de la méthode Translate et de stocker le résultat dans un tableau.

$arrTranslatedGroups = @()
Foreach ($Group in $CurrentWinId.Groups)
{
$arrTranslatedGroups += $Group.translate([System.type]::GetType("System.Security.Principal.NTAccount")).Value
}

 

Il suffit de vérifier si un groupe est présent à partir du tableau généré à l’aide de l’opérateur « -contains » qui retournera « True » ou « False » :

$arrTranslatedGroups -contains "NT AUTHORITY\Authenticated Users"

 

La deuxième solution consiste a converti dans un premier temps notre objet WindowsIdentity en WindowsPrincipal.

$CurrentWindowsPrincipal = new-object System.Security.Principal.WindowsPrincipal($CurrentWinId)

 

L’objectif étant de pouvoir utiliser la méthode « IsInRole ».

$CurrentWindowsPrincipal.IsInRole("CORPNET\group123")
$CurrentWindowsPrincipal.IsInRole("NT AUTHORITY\Authenticated Users")

Mise à jour le Mardi, 02 Septembre 2014 20:50