AD – Wyszukiwanie w całym lesie

System Exchange, a konkretnie cmdlety konsoli EMS, posiadają ciekawą cechę jaka jest parametr –ignonreDefaultScope. Jak można się domyślić ów mechanizm pozwala na przeszukiwanie obiektów w całym lesie, co jest znacznym ułatwieniem w przypadkach rozległego środowiska usługi Active Directory.

Alternatywne formy dla –ignonreDefaultScope to również:

$AdminSessionADSettings.ViewEntireForest = $True

lub jak kto woli:

Set-ADServerSettings -ViewEntireForest $True

Niestety, niniejsza funkcjonalność dotyczy tylko konsoli EMS. Szkoda, gdyż nie raz spotykałem się z koniecznością podobnego wyszukiwania obiektów w AD, właśnie za pomocą klasycznego modułu PowerShell do zarządzania usługą katalogową. Niestety moduł ActiveDirectory, w/w funkcjonalności natywnie nie posiada, a przynajmniej nie wprost.

Na szczęście nic straconego. W niniejszej kwestii z pomoc przychodzi nam rola wykazu globalnego. Jak to z GC bywa posiada on informacje o wszystkich obiektach usługi Active Directory w całym lesie, czyli dokładnie to czego nam trzeba. Niemniej jednak, domyślnie moduł ActiveDirectory wyszukuje obiekty przy pomocy klasycznego LDAPa, w ramach jakiegoś kontrolera domeny. Na przykład bieżącej domeny, tudzież po wskazaniu odpowiedniego serwera – innej domeny z lasu.

Aby przeszukiwać obiekty w ramach całego lasu, konieczne jest więc przełączenie trybu wyszukiwania, uwzględniające właśnie rolę wykazu globalnego. W ramach języka Windows PowerShell istnieje kilka metod wyszukiwania obiektów AD. Dlatego postaram się zaprezentować tylko te najpopularniejsze, czyt. te z których ja osobiście najczęściej korzysta.

Wersja z klasycznym modułem ActiveDirectory:

Jako przykład posłużę się cmdletm Get-ADUser, celem wyszukania użytkownika w ramach całego lasu. Na przykład:

Get-ADUser -Filter {samaccountname -eq "mgajda"} -Server contoso.com:3268

Mianowicie, cała magia polega na odpowiednim spreparowaniu serwera przeszukiwania, w ramach którego należy wskazać rolę wykazu globalnego. Odbywa się to poprzez przekierowanie zapytania na odpowiedni port serwera, który pełni tą rolę. Tak więc jako serwer wystarczy wskazać dowolny kontroler domeny, pod warunkiem iż pełni on role wykazu globalnego, lub w przypadku gdy wszystkie kontrolery domeny pełnią tą funkcję wystarczy wskazać nazwę domeny wraz z odpowiednim portem.

Wersja z wykorzystaniem DirectorySearcher:

W przypadku zapytań wykorzystujących obiekt DirectorySearcher, sprawa wygląda odrobinę inaczej. Mianowicie, w ramach SearchRoot zamiast klasycznego zapytania wykorzystującego protokół LDAP, na przykład „LDAP://…”, wystarczy zamienić skrót LDAP na GC, czyli skrót dla wykazu globalnego. Na przykład:

$Search = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"GC://contoso.com")
$Search.Filter = "(&(objectCategory=User)(SamAccountName=mgajda))"
$Search.FindAll()

W zbliżony sposób możliwe jest również wykorzystywanie akceleratora typu [ADSISearcher]:

 $Search = [ADSISearcher]"(&(objectCategory=User)(SamAccountName=mgajda))"
$Search.SearchRoot = [ADSI]"GC://contoso.com"
$Search.FindAll()

Niestety, pewnym nieudogodnieniem niniejszych metod, może okazać się samo ograniczenie roli wykazu globalnego. Mianowicie, natywnie nie posiada ona pełnych informacji o wszystkich atrybutach obiektów AD. Dzięki temu nie może ich ona zwrócić, tak jak to ma miejsce podczas klasycznego odpytywania protokołu LDAP. Dotyczy to również stosowania filtrów, bazujących tylko na atrybutach opublikowanych w GC.
Dlatego w przypadku konieczności zastosowania innych, niestandardowych atrybutów, konieczne jest wcześniejsze zmodyfikowanie schematu AD. W ramach zmian należy dołożyć replikację wymaganych atrybutów do roli wykazu globalnego. Oczywiście należy robić to rozważnie, gdyż może to pogorszyć wydajność np. poprzez zwiększenie ruchu sieciowego dla replikacji czy większe zużycie przestrzeni dyskowej.

Źródła:
https://technet.microsoft.com/en-us/library/dd378945(v=ws.10).aspx
https://support.microsoft.com/en-us/kb/248717

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s