Working with Active Directory from Powershell using .Net

By Andrei Ungureanu - Last updated: Wednesday, July 23, 2014 - Save & Share - Leave a Comment

De cand cu Windows 2012, nevoia de a apela direct la .Net sau ADSI pentru interactiunea cu Active Directory s-a redus foarte mult, dar inca mai sunt momente cand nu gasim cmdlet-ul potrivit pentru un anumit task. Sau cand pe sistemul de pe care lucram nu avem la dispozitie noile cmdlet-uri sau avem un script pe care dorim sa il facem cat mai portabil.

Daca ai .Net pe sistemul de pe care rulezi scriptul, atunci nu mai ai nevoie de nimic altceva. Exista 3 namespace-uri de interes pentru lucrul cu Active Directory:

System.DirectoryServices.DirectoryEntry – folosit pentru a crea obiecte noi in AD

System.DirectoryServices.DirectorySearcher – are tot ce trebuie pentru a efectua cautari

System.DirectoryService.ActiveDirectory – cu namespace-ul asta te ocupi de management-ul AD-ului si o sa-l folosim ca exemplu pentru ca e cel mai important pentru un admin.

De exemplu folosind urmatoarea sintaxa putem afla detalii despre forestul actual:

$forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()

image

Iar cu Get-Member putem vedea proprietatile si metodele obiectului rezultat:

image

Dupa cum se poate vedea exista chiar si metoda pentru RaiseForestFunctionality sau GetAllTrustRelationships. Sau proprietatea numita Sites care ne va lista toate site-urile din forest.

image

Dar hai sa luam exemplu in care dorim sa ne conectam la un anumit domeniu. Pentru asta exista clasa Domain si metoda GetDomain. Treaba e ca GetDomain accepta un obiect de tip DirectoryContext:

$dscontext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(‘Domain’, "winadmin.local")

image

Odata obtinut DirectoryContext putem folosi metoda GetDomain.

$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($dscontext)

image

Iata ce ne arata si un Get-Member:

image

Dar astea sunt doar cateva exemple. Daca stati sa studiati documentatia de pe MSDN pentru aceste clase veti observa ca puteti face aproape orice via .Net, sa fortati replicari, KCC, sa creati trust-uri, sa verificati status-ul replicarilor in AD si multe altele.

PS: Tineti minte ca de fiecare data cand este posibil este mai bine sa folositi cmdlet-urile deja existente.

Posted in Active Directory, Scripting • Tags: , Top Of Page

Write a comment