Identifier les groupes de l’utilisateur courant avec PowerShell

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 :

{codecitation style= »brush: PowerShell »}

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

{/codecitation}

 

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.

{codecitation style= »brush: PowerShell »}

$arrTranslatedGroups = @()

Foreach ($Group in $CurrentWinId.Groups)

{

$arrTranslatedGroups += $Group.translate([System.type]::GetType(« System.Security.Principal.NTAccount »)).Value

}

{/codecitation}

 

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 » :

{codecitation style= »brush: PowerShell »}

$arrTranslatedGroups -contains « NT AUTHORITY\Authenticated Users »

{/codecitation}

 

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

{codecitation style= »brush: PowerShell »}

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

{/codecitation}

 

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

{codecitation style= »brush: PowerShell »}

$CurrentWindowsPrincipal.IsInRole(« CORPNET\group123 »)

$CurrentWindowsPrincipal.IsInRole(« NT AUTHORITY\Authenticated Users »)

{/codecitation}