Powershell: lista członków grupy domenowej oraz czy użytkownik należy do grupy?


 

powershell_icon_150Powershell należy do najpopularniejszych tematów na naszym Blogu, więc mam dla Was koleją porcję praktycznych porad. Dzisiaj nauczymy się wyświetlać członków grupy domenowej (i zapisywać wynik w pliku) oraz przedstawię Wam prosty skrypt, który sprawdzi, czy użytkownik należy do danej grupy, co na pewno przyda się Wam w bardziej zaawansowanych skryptach (na przykład do mapowania odpowiednich udziałów odpowiednim użytkownikom w skrypcie logowania).

O członkach grupy w CMD (polecenia NET, DSQUERY, ADFIND) możecie poczytać w jednym z moich wcześniejszych artykułów.

Powershell: lista członków grupy domenowej

Do sprawdzenie członków grupy służy Cmdlet „Get-ADGroupMember”. Opcjonalny parametr -Recursive sprawdzi też grupy wewnątrz grupy:

Get-ADGroupMember -Identity „SPECE IT” -Recursive

Efektem powyższego polecenia będzie dość szczegółowa lista członków grupy i ich właściwości takie jak ścieżka LDAP, typ, GUID, SID. Oto przykład:

distinguishedName : CN=Lukasz Skalikow,OU=Users,DC=SPECE,DC=IT
name : Lukasz Skalikow
objectClass : user
objectGUID : 1g605f21-8fd1-41b9-110g-40fc818g4e31
SamAccountName : lukasz
SID : S-1-5-23-502526629-1121223429-1531857252-2750172
distinguishedName : CN=Piotr Berent,OU=Users,DC=SPECE,DC=IT
name : Piotr Berent
objectClass : user
objectGUID : 659b7a52-f8b2-45f0-b2da-81bc6a3dfsas
SamAccountName : piotr
SID : S-1-3-28-502523629-1131223429-1531347252-2450172
distinguishedName : CN=Dariusz Gora,OU=Users,DC=SPECE,DC=IT
name : Dariusz Gora
objectClass : user
objectGUID : 651b7b51-f8a2-35f0-b2df-81bc6w3dfaaa
SamAccountName : dariusz
SID : S-1-3-11-501123622-1134423421-1537747772-2458872


Aby nadać temu nieco praktyczniejszy charakter, muszę nawiązać do artykułu, w którym opisywałem przekierowanie wyniku poleceń do pliku oraz formatowanie danych. W ten oto sposób wszystkie szczegółowe dane kont należących do grupy zapiszemy w pliku htm:

Get-ADGroupMember -Identity „SPECE IT” -Recursive | ConvertTo-HTML > c:\members_of_spece_it.htm

Tak ograniczymy dane wyłącznie do loginów (i zapiszemy w pliku .htm):

Get-ADGroupMember -Identity „SPECE IT” -Recursive | ConvertTo-HTML -Property SamAccountName > c:\members_of_spece_it.htm

W ten sposób sformatujemy wynik już w konsoli PS i wyświetlimy same loginy:

Get-ADGroupMember -Identity „SPECE IT” -Recursive | Select -ExpandProperty SAMAccountName

Listę loginów możemy od razu zrzucić do pliku tekstowego:

Get-ADGroupMember -Identity „SPECE IT” -Recursive | Select -ExpandProperty SAMAccountName | Out-File c:\members_of_spece_it.txt


Czy użytkownik należy do danej grupy?

Skoro umiemy już sprawdzać członków grup domenowych, to warto poznać sztuczkę, która pozwoli nam sprawdzić czy dany użytkownik należy do grupy domenowej.
W podanym skrypcie możemy podać jednego użytkownika, bądź kilku po przecinku.

cls
clear
$users = „konto1″,”konto2″,”konto3”
$group = „SPECE IT”
$members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SAMAccountName
ForEach ($user in $users) {
If ($members -contains $user) {
Write-Host „$user nalezy do grupy $group”
} Else {
Write-Host „$user NIE nalezy do grupy $group”
}
}


Logika działania skryptu nie wymaga chyba dokładnego omawiania :). Wyświetlanie komunikatu „nalezy” / „nie nalezy” można zamienić na nieco bardziej zaawansowane kroki, jak choćby mapowanie udziału sieciowego.

To jaką następną poradę o Powershellu chcielibyście przeczytać?


Podobne Tematy:

  • Darek

    Bardzo fajny artykuł :) Jeżeli mogę coś zasugerować to chyba jeszcze nie było wpisu o tym jak zaciągać masowo rekordy z pliku np. csv i wykorzystywać to potem w konsoli Powershella? PS. Szacun za to dzielicie się wiedzą oraz że potraficie przekazać tę wiedzę w przystępny sposób :)

    • Czy Get-Content (gc) Ci odpowiada?

      $lista_z_pliku = gc lista_w_pliku.txt (to załatwia import np listy adresów IP)

      Do formatowanych csv (takich naprawdę rozdzielanych przecinkiem i z nagłówkami) służą:
      Import-Csv
      ConvertFrom-Csv
      w zależności od tego co chcesz osiągnąć :)
      Spokojnie, artykuł na pewno się kiedyś o tym pojawi ;)