Powershell: Porównanie grup użytkowników

27-Mar-2016

Problem: Masz użytkownika UserA. UserA należy do pewnych grup AD. Jest nowy uytkownik UserB, który docelowo powinien należeć do tych samych grup, co userA. Członkostwo  wpewnych grupach zostało już nadane, a w innych jeszcze nie. Musisz sporządzić listę grup, do których należy userA, a userB nie (i odwrtonie).

Rozwiązanie:

Skorzystamy z modułu ActiveDirectory. Możesz go załadować poleceniem

Import-Module ActiveDirectory

ale jeśli masz powershell 4.0 lub nowszy to pierwsze odwołanie się do polecenia z tego modułu spowoduje jego załadowanie. Potrzebne nam polecenie to Get-ADPrincipalGroupMembership, które pozwoli uzyskać listę grup do których należy wskazany parametrem użytkownik. Ponieważ nie interesuje nas nic więcej niż nazwa grupy, to po pobraniu nazwy użytkownika można po prostu przesłać wynik do polecenia select, które pobierze jedynie właściwość name i awansuje ją do rangi obiektu (służy do tego parametr -Expand).

Podczas porównywania zawartości list z nazwami grup skorzystamy z metody Contains. Contains wywoływane na rzecz listy napisów, sprawdza czy przekazywany argumentem napis jest elementem tej listy. Oto i skrypt:

$me = 'userA'
$he = 'userB'
$myGroups = Get-ADPrincipalGroupMembership $me | select -expand name
$hisGroups = Get-ADPrincipalGroupMembership $he | select -expand name
Write-Host "Groups $me is member of and $he is NOT a member:"
foreach($g in $myGroups)
{
   if(!$hisGroups.Contains($g))
   {
     $g
   }
}
Write-Host "Groups $he is member of and $me is NOT a member:"
foreach($g in $hisGroups)
{
   if(!$myGroups.Contains($g))
   {  
     $g
   }
}

Dodaj komentarz:

Autor: Rafał Kraik