Adam the Automator (Polski)
Popularnym zastosowaniem programu PowerShell jest praca z usługami Active Directory Directory Services (AD). Jest tak wiele rzeczy, które PowerShell może oszczędzić czas z obiektami AD. Korzystanie z programu PowerShell pozwala zaoszczędzić mnóstwo czasu i członków grup AD.
Grupy w usłudze Active Directory to świetny sposób na segmentację kont użytkowników. Grupy umożliwiają administratorom definiowanie dostępu do zasobów w wielu systemach.
W tym artykule użyjmy PowerShell, aby uzyskać członków grupy AD i wyeksportować członków grupy AD. Następnie możesz użyć tych informacji do wygenerowania wielu interesujących raportów.
Spis treści
Wymagania wstępne
Jeśli chcesz postępować zgodnie z treścią tego artykułu, upewnij się, że masz gotowe następujące wymagania:
- Praca na komputerze z systemem Windows 10 przyłączonym do domeny
- Zalogowano się jako użytkownik, który może czytać grupy AD i konta użytkowników
- Zainstaluj moduł PowerShell Active Directory
Nauka podstaw
Aby wysyłać zapytania do grup AD i członków grup, masz do dyspozycji dwa polecenia cmdlet PowerShell – Get-AdGroup
i Get-AdGroupMember
.
Get-ADGroup
wysyła zapytanie do kontrolera domeny i zwraca obiekty grupy AD. Get-AdGroupMember
sprawdza wewnątrz każdej grupy i zwraca wszystkie konta użytkowników, grupy, kontakty i inne obiekty, które istnieją w tej grupie.
Pobieranie grup AD
Aby znaleźć grupy AD za pomocą PowerShell, możesz użyć polecenia cmdlet Get-ADGroup
. Bez parametrów Get-ADGroup
wysyła zapytanie do AD i zwraca wszystkie grupy w domenie przy użyciu parametru Filter
. Parametr Filter
jest wymagany. Istnieje w celu ograniczenia zwracanych grup na podstawie różnych kryteriów.
Na przykład, aby znaleźć wszystkie grupy bez względu na jakiekolwiek kryteria, użyj Get-ADGroup
i określ symbol wieloznaczny ( gwiazdka) dla parametru Filter
. Możesz zobaczyć przykład poniżej. Przewijanie wszystkich tych grup może zająć trochę czasu, jeśli masz w domenie setki, a nawet tysiące.
Jeśli chcesz znaleźć jedną grupę, możesz użyj parametru Identity
.
Parametr Identity
jest wspólnym parametrem we wszystkich poleceniach cmdlet programu PowerShell w usłudze Active Directory. Pozwala ograniczyć zapytanie do pojedynczego obiektu AD. Na przykład, jeśli chcesz sprawdzić, czy istnieje grupa o nazwie HR, możesz to sprawdzić, uruchamiając poniższe polecenie.
Pobieranie członków grupy AD
Użycie programu PowerShell do wyświetlenia listy członków grupy AD wymaga polecenia cmdlet Get-ADGroupMember
. To polecenie cmdlet pobiera obiekty użytkowników, grup i komputerów w określonej grupie. Być może musisz znaleźć wszystkich członków grupy Administratorzy. W najprostszej formie wystarczy użyć parametru Identity
ponownie określając nazwę grupy, jak poniżej.
Pamiętaj, że
Get-AdGroupMember
zwraca tylko członkostwo w grupie dla użytkowników, grup i komputerów. Nie zwróci innych obiektów AD, takich jak kontakty.
Wyliczanie członków grupy wewnątrz członków grupy
Jak być może wiesz, grupy AD może zawierać nie tylko konta użytkowników, ale także inne grupy nazywane zagnieżdżaniem. Gdy grupa jest zagnieżdżona w innej grupie, członkowie tej grupy dziedziczą te same uprawnienia przypisane grupie nadrzędnej.
Domyślnie polecenie cmdlet PowerShell Get-AdGroupMember
tak nie zwraca zagnieżdżonych członków grupy. Aby temu zaradzić, możesz użyć parametru Recursive
. Na przykład możesz znaleźć członków grup zagnieżdżonych w grupie HR za pomocą parametru Recursive
, jak pokazano poniżej.
Pobieranie wielu grup / członków jednocześnie
Jeśli chcesz wysłać zapytanie do AD dla wielu różnych grup lub członków grup naraz, możesz to również zrobić za pomocą pętli PowerShell foreach. Pętla foreach uruchamia polecenie lub kod dla każdego elementu w kolekcji. W tym przypadku ta kolekcja będzie listą nazw grup.
Być może musisz znaleźć wszystkich członków grupy w działach HR, księgowości i IT. Aby to zrobić, najpierw utwórz kolekcję lub tablicę nazw tych grup. Poniższy przykład definiuje tę kolekcję jako $groupNames
. Następnie dla każdej nazwy w tej kolekcji uruchom Get-ADGroupMember
, podając nazwę każdej grupy w parametrze Identity
.
Alternatywnie możesz użyć polecenia cmdlet
ForEach-Object
, aby zapętlić grupy.
Korzystanie z alternatywnych poświadczeń
Podobnie jak wiele innych poleceń cmdlet programu PowerShell, polecenia cmdlet grupy AD mają Credential
parametr.Domyślnie za każdym razem, gdy uruchamiasz polecenie cmdlet grupy AD, używa ono Twoich poświadczeń zalogowanych do wysyłania zapytań do usługi Active Directory. To zachowanie wskazuje, że musisz być na komputerze przyłączonym do domeny zalogowanym jako użytkownik Active Directory z uprawnieniami.
Ale co, jeśli jesteś na komputerze grupy roboczej lub musisz uwierzytelnić się w usłudze AD jako inny użytkownik? W takim przypadku możesz użyć parametru Credential
. Ten parametr umożliwia określenie nazwy użytkownika i hasła, które mają być używane do uwierzytelniania.
Na przykład być może Twoje konto użytkownika nie ma uprawnień do wykonania zadania AD. Masz konto usługi z dodatkowymi uprawnieniami. Możesz być zalogowany jako użytkownik standardowy, ale nadal uwierzytelniać się za pomocą konta usługi, jak pokazano poniżej.
Polecenie cmdlet Get-Credential
wyświetla monit o podanie nazwy użytkownika / hasła w celu utworzenia poświadczenie. To poświadczenie jest następnie przekazywane do polecenia cmdlet Get-AdGroup
w celu uwierzytelnienia.
Parametr
Credential
jest wszechobecny w programie PowerShell w celu zapewnienia poświadczeń uwierzytelniania. Aby uzyskać więcej informacji, przeczytaj artykuł Używanie polecenia cmdlet Get-Credential programu PowerShell i poświadczeń wszystkich rzeczy.
Uzyskiwanie członków grupy za pomocą Get-ADGroup?
Może to wydawać się sprzeczne z intuicją, ale możesz również uzyskać członków grupy za pomocą polecenia cmdlet Get-ADGroup
.
Okazuje się, że zwraca właściwość dla każdej grupy o nazwie members
. To jest zbiór obiektów AD, które są członkami grupy.
Na przykład, aby ponownie znaleźć członków grupy w tej grupie HR bez używania Get-ADGroupMember
, możesz zrób coś takiego:
Dlaczego warto używać tej metody zamiast drugiej? Główna różnica polega na tym, że właściwości members
zawierają wszystkie typy obiektów AD – nie tylko użytkowników, komputery i inne grupy.
Być może masz kontakty wewnątrz różnych grup . Gdy uruchomisz Get-ADGroupMember
, te kontakty nie pojawią się. Ale jeśli powiesz Get-ADGroup
, aby zwrócił wszystkich członków tej grupy wraz z rozszerzeniem zbioru, jak pokazano poniżej, zobaczysz kontakty.
Znajdowanie określonych atrybutów reklamy
W powyższej sekcji dotyczącej podstaw po prostu zwracałeś wszystkie grupy i członków grup. Informacje zwrócone dla każdej grupy i członka grupy to tylko podzbiór atrybutów AD powiązanych z każdym typem obiektu.
Może chcesz zobaczyć adres e-mail konta użytkownika, datę ostatniego logowania lub inny powiązany atrybut AD ? Aby to zrobić, musisz wykazać się kreatywnością.
Być może udało Ci się znaleźć wszystkich członków grupy w grupie HR, ale potrzebujesz również zobaczyć adres e-mail każdego konta użytkownika?
Filtrowanie wyników
Do tego momentu znalazłeś wszystkie grupy i członków grup, ale w codziennym środowisku pracy rzadko musisz to robić. Możliwe, że będziesz musiał znaleźć tylko ograniczoną liczbę każdego przedmiotu. Polecenia cmdlet grupy AD mają kilka sposobów radzenia sobie z tym.
Parametr filtru
Jak wspomniano wcześniej, oba polecenia cmdlet mają Filter
parametr. Ten parametr pozwala ograniczyć to, co jest zwracane na wiele różnych sposobów poza zakresem tego artykułu.
Używając parametru Filter
, możesz ograniczyć wyniki do dowolnej reklamy atrybut, taki jak nazwa, typ grupy, adres e-mail, ostatnie logowanie użytkowników itd.
Na przykład, być może chcesz znaleźć tylko grupy zabezpieczeń. W takim przypadku należy określić atrybut GroupCategory
i ustawić warunek, aby zapewnić zwrócenie tylko grup Security
.
Może chcesz znaleźć wszystkie grupy zabezpieczeń, ale nie mogą to być grupy lokalne domeny. Następnie należy dodać kolejny warunek (tym razem za pomocą operatora -ne
), aby zapobiec zwracaniu jakichkolwiek lokalnych grup domeny.
Jeśli chcesz dowiedzieć się, jak tworzyć filtry zapytań, zapoznaj się z artykułem Learning Active Directory i LDAP Filters w PowerShell.
Ograniczanie wyników grup według jednostki organizacyjnej (OU)
Być może masz różne grupy zagnieżdżone w jednostkach organizacyjnych. Niekoniecznie chcesz znaleźć wszystkie grupy, ale tylko grupy w określonej jednostce organizacyjnej. W takim przypadku możesz użyć parametru SearchBase
.
Parametr SearchBase
umożliwia określenie wyróżnionych jednostek organizacyjnych name (DN), aby rozpocząć wyszukiwanie grup w. Na przykład, być może masz jednostkę organizacyjną o nazwie Lokalizacje w katalogu głównym domeny. W jednostce organizacyjnej Lokalizacje masz każdą utworzoną jednostkę organizacyjną lokalizacji, np. Austin, NYC i Los Angeles. Szukasz tylko grup w nowojorskiej jednostce organizacyjnej i musisz ograniczyć widzenie innych.
Przykładową strukturę AD OU pokazano poniżej.Zwróć uwagę, że inne grupy istnieją poza jednostkami organizacyjnymi Lokalizacji.
Być może musisz znaleźć wszystkie grupy AD, które są tylko w jednostce organizacyjnej NYC. Aby ograniczyć zapytanie, użyj parametru SearchBase
określającego nazwę wyróżniającą, jak pokazano poniżej. Wszystkie grupy w jednostce organizacyjnej lokalizacji są zwracane.
Ale teraz musisz znaleźć wszystkie grupy we wszystkich jednostkach organizacyjnych w jednostce organizacyjnej lokalizacji. Get-ADGroup
zwraca tylko grupy w samej jednostce organizacyjnej Lokalizacje – nie w podrzędnych jednostkach organizacyjnych.
Aby zwrócić grupy w podrzędnych jednostkach organizacyjnych, musisz użyć SearchScope
. Ten parametr jest podobny do parametru Recursive
pod tym względem, że sprawdza również obiekty podrzędne.
Na przykład, aby znaleźć wszystkie grupy w dowolnej jednostce organizacyjnej w jednostce organizacyjnej Lokalizacje, określ Subtree
lub 2
. Ta wartość dla SearchScope
nakazuje Get-ADGroup
rekurencyjne przeglądanie wszystkich podrzędnych, wnuków i kolejnych jednostek organizacyjnych.
Pełne zestawienie opcji parametrów SearchScope
można znaleźć w dokumentacji Get-ADGroup
.
Eksportowanie grup i członków AD
W końcu wiesz, jak wyszukiwać i zwracać grupy i członków grup, których potrzebujesz. Wszystkie te informacje są wysyłane do konsoli PowerShell. Ale teraz musisz pobrać te informacje jako plik CSV lub arkusz programu Excel.
Jedyne, co musisz teraz zrobić, to wysłać wszystkie te informacje do pliku.
Eksportowanie do a CSV
Jednym z popularnych formatów eksportowania informacji o reklamach jest CSV. PowerShell ma przydatne polecenie cmdlet, które umożliwia łatwe tworzenie plików CSV z danych wyjściowych programu PowerShell o nazwie Export-Csv
.
Możesz utworzyć plik CSV za pomocą dowolnego polecenia omówionego w tym artykule rurociągiem do Export-Csv
. Korzystając z poniższego przykładu, przekieruje wszystkie dane wyjściowe, które Get-AdGroup
wróciłyby do konsoli, zamiast tego do pliku CSV.
Aby uzyskać więcej informacji na temat tego przydatnego polecenia cmdlet, zobacz Export-Csv: The PowerShell Way to Treat the CSV Files as First Class Citizens.
Eksportowanie do programu Excel
PowerShell nie ma natywnego sposobu eksportowania informacji do programu Excel. Ale zawsze możesz pobrać darmowy moduł społeczności o nazwie ImportExcel. Ten moduł umożliwia eksportowanie w formacie CSV bezpośrednio do arkuszy programu Excel. Aby zainstalować moduł PowerShell, uruchom Install-Module ImportExcel -Scope CurrentUser
.
Korzystając z powyższego przykładu, zamiast pliku CSV, musisz wyeksportować grupy do arkusza programu Excel, użyj polecenia cmdlet Export-Excel
, jak pokazano poniżej.
Moduł ImportExcel ma mnóstwo funkcji do pracy z programem Excel. Jeśli potrzebujesz bardziej rozbudowanego arkusza roboczego, prawdopodobnie ma on dla ciebie funkcję.
Aby uzyskać więcej informacji na temat korzystania z modułu ImportExcel, przeczytaj ten artykuł. Stanowi świetne wprowadzenie do niektórych typowych przypadków użycia, które obsługuje.
Podsumowanie
Używając tylko dwóch poleceń cmdlet PowerShell, możesz prawie wszystko z grupami AD. Ten artykuł był tylko wprowadzeniem do dostępnych funkcji. Skorzystaj z zebranej tutaj wiedzy, skorzystaj z niektórych linków do głębszych tematów w artykule i zobacz, co możesz zbudować!