Working with Active Directory from Powershell using .Net
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()
Iar cu Get-Member putem vedea proprietatile si metodele obiectului rezultat:
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.
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")
Odata obtinut DirectoryContext putem folosi metoda GetDomain.
$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($dscontext)
Iata ce ne arata si un Get-Member:
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.