Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Scripturi pentru descărcarea tuturor utilizatorilor din MS Active Directory (ITGC). Script PowerShell pentru a importa în pădurea Active Directory și pentru a crea fișierul utilizator

Scripturi pentru descărcarea tuturor utilizatorilor din MS Active Directory (ITGC). Script PowerShell pentru a importa în pădurea Active Directory și pentru a crea fișierul utilizator

Astăzi vom încerca să descarcăm lista tuturor utilizatorilor într-un fișier separat din Active Directory. PowerShell va fi principalul nostru asistent în această problemă. Acest lucru se datorează faptului că Microsoft a planificat inițial PowerShell Shell ca instrument principal pentru gestionarea componentelor serverului Windows. Și astăzi, când avem deja versiunea 2.0, în general, așa este.

Chiar și în trecutul recent, pentru a interacționa cumva cu AD, administratorii trebuiau să aibă la dispoziție fie utilitarul dsquery, fie tot felul de scripturi sau utilitare. Astăzi, începând cu Windows Server 2008 R2, putem lucra cu AD prin PowerShell. Odată cu apariția PowerShell 2.0, un modul special este utilizat pentru a interacționa cu Active Directory Modul Active Directory pentru Windows PowerShell care conține lista necesară de cmdleturi. Pentru sarcinile noastre, vom folosi comanda Get-ADUser.

Deci, în funcție de sistemul de operare pe care vom rula consola PowerShell, va trebui să facem „pași pregătitori”.

1) Dacă lucrăm de sub Windows Server până la versiunea 2012, apoi trebuie să executăm comanda:

  • Import-Module activedirectory - comandă pentru importul unui modul în AD

Pentru versiunile de sistem de operare din 2012 și mai sus, acest modul este deja activat implicit.

2) Dacă lucrăm de pe orice client Windows, atunci trebuie instalat pachetul de administrare la distanță RSAT, cu componenta Active Directory Module pentru Windows PowerShell instalată.

Este de remarcat faptul că cmdletul Get-ADUser este recomandat să ruleze atunci când cantitatea de date încărcate este de până la 1000 de utilizatori.

Exportarea utilizatorilor AD utilizând PowerShell într-un fișier separat

Mai întâi, să apelăm ajutorul pentru comanda Get-ADUser. Ca urmare, veți primi toate comenzile necesare pentru administrare ulterioară.

  • ajuta Get-ADUser - comanda pentru a apela ajutor

Pentru a obține o listă a tuturor utilizatorilor cu toate proprietățile într-o fereastră PowerShell, rulați următoarea comandă:

  • Get-ADUser -filter * - exportul listei de utilizatori AD

Această descărcare nu este complet informativă și nu încadrează toate informațiile necesare din fereastră. Prin urmare, să încercăm să restrângem căutarea și să afișăm proprietățile unui anumit utilizator numit user1:

  • Get-ADUser -identity user1 -properties * - exportul proprietăților unui anumit utilizator

Acum să încercăm să exportăm lista tuturor utilizatorilor cu proprietățile lor într-una externă. txt sau csv fişier:

  • Get-ADUser -filter * -properties * | Export-csv -path c: \ users.csv -encoding Unicode - exportul utilizatorilor într-un fișier separat

Aș dori să atrag o atenție deosebită asupra cheii -codificarea Unicode... Este folosit pentru ca alfabetul chirilic rus, după exportul din AD, să poată fi afișat corect în fișierul încărcat. De exemplu, prin Microsoft Excel vom vedea semne de întrebare în loc de litere rusești.

Când vizualizați un fișier, datele sunt exportate pe o singură linie și astfel nu pot fi citite. Pentru a schimba acest lucru, trebuie să facem următoarele:

Scripturi pentru a descărca toți utilizatorii din MS Active Directory (ITGC)

Ivan Piskunov

Una dintre procedurile standard de audit ITGC pentru catalog Director activ este să obțineți descărcarea tuturor utilizatorilor domeniului. Pe baza datelor primite se formează apoi proceduri de testare, de exemplu, studierea listei de administratori sau identificarea utilizatorilor cu o parolă expirată. Cel mai eficient mod de a forma o astfel de descărcare ar fi folosirea interfeței standard PowerShell , exemple din care vom lua în considerare în acest articol

1. Încărcare rapidă folosind scriptul PowerShell

Mai jos este un script PowerShell ca una dintre cele mai simple și rapide moduri de a obține o listă a tuturor utilizatorilor unui domeniu AD în format CSV, care poate fi deschisă fără probleme de același Excel.

$ objSearcher = New-Object System.DirectoryServices.DirectorySearcher $ objSearcher.SearchRoot = "LDAP: // ou = Utilizatori, ou = Departamente, dc = test, dc = ru" $ objSearcher.Filter = "(& (objectCategory = persoană) (! userAccountControl: 1.2.840.113556.1.4.803: = 2)) "$ utilizatori = $ objSearcher.FindAll () # Număr de conturi $ utilizatori.Număr $ utilizatori | Pentru fiecare obiect ($ user = $ _. Proprietăți New-Object PsObject -Property @ (Titlu = $ user.description Department = $ user.department Login = $ user.userprincipalname Telefon = $ user.telephonenumber Room = $ user.physicaldeliveryofficename Complet nume = $ user.cn)) | Export-Csv -NoClobber -Codificare utf8 -Calea C: list_domen_users.csv

Pentru ca scriptul să funcționeze pe sistemul dvs., trebuie să îl corectați ușor, și anume să introduceți parametrii necesari, adică. ca în acest exemplu aceștia sunt parametri Utilizatori în unitate Departamente în domeniu Test.ru. Și, de asemenea, specificați calea către locația în care este salvat fișierul list_domen_users.csv

După descărcare, dacă deschideți imediat list_domen_users.csv , va arăta într-o formă care nu poate fi citită, totuși, prin mijloace standard, îl putem aduce cu ușurință în formatul de care avem nevoie. Deschidere în Excel list_domen_users.csv , selectați prima coloană, apoi accesați fila „Date” și faceți clic pe „Text după coloane”. Selectați „delimitat” și faceți clic pe „Următorul”. Gata!

! Ar trebui notat că acest script nu va afișa mai mult de 1000 de utilizatori. Este destul de potrivit pentru o companie mică, dar cei care au un număr mare de utilizatori în domeniu ar trebui să folosească metodele descrise mai jos.

2. Cmdlet PowerShell avansat pentru descărcarea utilizatorilor Active Directory

Instrumentul Active Directory Module pentru Windows PowerShell (introdus în Windows Server 2008 R2 și mai târziu) vă permite să generați cmdlet-uri care efectuează diverse manipulări cu obiecte de director AD. Pentru a obține informații despre utilizatori și proprietățile acestora, utilizați cmdletul Get-ADUser.

A începe lansați o fereastră Powershell cu drepturi de administrator și importați modulul Active Directory pentru acțiuni ulterioare:
Import-Module activedirectory

La listează toate conturile de domeniu a, hai să executăm comanda:

Get-ADUser -filter *

La afișați informații complete despre toate atributele disponibile utilizator tuser, rulați comanda

Get-ADUser -identity tuser -properties *


De exemplu, ne interesează informații despre data la care a fost schimbată parola și ora la care expiră ... Rezultatul executării comenzii poate fi exportat într-un fișier text:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Nume, PasswordExpired, PasswordLastSet, PasswordNeverExpires> C: tempusers.txt

Sau imediat încărcați în CSV , care în viitor va fi convenabil de exportat în Excel (în plus, folosind sort-obiectul, vom sorta tabelul după coloana PasswordLastSet și, de asemenea, vom adăuga condiția unde - numele de utilizator trebuie să conțină șirul „Dmitry”)

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | unde ($ _. nume –cum ar fi „* Dmitry *”) | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c: tempuser-password-expires-2015.csv

Continuăm să explorăm cmdlet-uri PowerShell utile pentru lucrul cu Active Directory. În ultimul articol, am vorbit despre a vă permite să obțineți orice informații despre conturile de utilizator AD. Astăzi vom vorbi despre cmdlet obține-ADComputerși utilizarea acestuia pentru a obține diverse date despre conturile de computer (servere și stații de lucru) dintr-un domeniu Active Directory.

Să ne stabilim o sarcină practică: folosind PowerShell, trebuie să obțineți o listă de conturi de computer care nu au fost înregistrate în domeniu de mai mult de 120 de zile (calculatoare inactive) și să le opriți.

Înainte de a începe să lucrați cu cmdletul Get-ADComputer, trebuie să conectați modulul ActivDirectorModulpentruWindowsPowerShell.

Import-Module activedirectory

Sfat... În PowerShell 3.0 (introdus în Windows Server 2012) și mai târziu, acest modul este activat implicit la instalarea Instrumentelor de administrare a serverului la distanță -> Instrumente de administrare a rolurilor -> Instrumente AD DS și AD LDS -> Modulul Active Directory pentru Windows PowerShell. Pentru a utiliza cmdletul Get-ADComputer în clienții Windows 10, 8.1 și Windows 7, trebuie să descărcați și să instalați pentru versiunea sistemului de operare și să activați modulul AD-Powershell din panoul de control sau cu comanda:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Considerații de sintaxă pentru cmdlet-ul Get-ADComputer

Ajutorul despre parametrii cmdlet-ului Get-ADComputer este invocat standard folosind Get-Help:

Pentru a obține informații de la AD folosind cmdleturile modulului AD for Powershell, nu este necesar să aveți drepturi de administrator de domeniu, este suficient ca contul sub care rulează cmdletul să fie inclus în grupul de utilizatori ai domeniului (Utilizatori Autentificați / Domeniu utilizatori).

Pentru a obține informații despre un anumit computer din domeniu, specificați numele acestuia cu parametrul - Identitate:

Get-ADComputer -Identity SRV-DB01

Suntem interesați de ora ultimei înregistrări de computer în domeniul AD, dar aceste informații nu se află în ieșirea comenzii. Să afișăm toate proprietățile computerului disponibile în Active Directory:

Get-ADComputer -Identity SRV-DB01 -Properties *

După cum puteți vedea, ora ultimei conectări a acestui computer la rețea este indicată în atributul LastLogonDate - 21/09/2015 0:20:17.

Să eliminăm toate informațiile inutile, lăsând doar valoarea câmpurilor Numeși LastLogonDate.

Get-ADComputer -identity SRV-DB01 -Properties * | Nume FT, LastLogonDate -Autosize

În continuare, trebuie să corectați comanda astfel încât să afișeze informații despre ora ultimei înregistrări în rețea pentru toate computerele din domeniu. Pentru a face acest lucru, înlocuiți parametrul Identitate pe Filtru:

Get-ADComputer -Filter * -Properties * | Nume FT, LastLogonDate -Autosize

Pentru a afișa date despre computere într-un anumit container de domeniu (OU), utilizați parametrul SearchBase:
Get-ADComputer -SearchBase ‘OU = Moscow, DC = winitpro, DC = loc’ -Filter * -Properties * | Nume FT, LastLogonDate -Autosize

Sortați rezultatele interogării după ora ultimei conectări la rețea (câmpul LastLogonDate) folosind comanda Fel:

Get-ADComputer -Filter * -Properties * | Sortează LastLogonDate | Nume FT, LastLogonDate -Autosize

Așadar, am obținut o listă de computere din domeniu și ora ultimei lor conectări la rețeaua Active Directory, acum dorim să blocăm conturile computerelor care nu au fost folosite de mai mult de 120 de zile.

Folosind Get-Date, obținem valoarea datei curente în variabilă și scădem 120 de zile din data curentă:

$ date_with_offset = (Get-Date) .AddDays (-120)

Variabila rezultată cu data poate fi folosită ca filtru pentru cererea Get-ADComputer de către câmpul LastLogonDate

Get-ADComputer -Properties LastLogonDate -Filter (LastLogonDate -lt $ date_with_offset) | Sortează LastLogonDate | Nume FT, LastLogonDate -Autosize

Astfel, am primit o listă de calculatoare inactive care nu s-au înregistrat în rețea de mai mult de 120 de zile. Folosind comanda Dezactivați-ADAcont dezactivați-le.

Sfat... Prima dată este mai bine să testați rezultatele comenzii cu butonul radio Ce-ar fi dacă care păstrează comanda neschimbată, arătând ce se va întâmpla atunci când este executată.

Get-ADComputer -Properties LastLogonDate -Filter (LastLogonData -lt $ date_with_offset) | Set-ADComputer -Enabled $ false -whatif

Acum puteți bloca toate conturile de computer primite:

Get-ADComputer -Properties LastLogonDate -Filter (LastLogonData -lt $ datecutoff) | Set-ADComputer -Enabled $ false

Get-ADComputer: cazuri practice de utilizare

Iată câteva exemple mai utile de comandă folosind cmdletul Get-ADComputer.

Obțineți numărul de computere din Active Directory:

Get-ADComputer -Filter (SamAccountName -cum ar fi „*”) | Măsură-Obiect

Lista computerelor ale căror nume încep cu BuhPC:

Get-ADComputer -Filter „Nume-like” BuhPC * „” -Properties IPv4Address | Format-table Name, DNSHostName, IPv4Address -A

Selectați toate stațiile de lucru Windows XP:

Get-ADComputer -Filter (Sistem de operare -cum ar fi „* XP *”)

Selectați numai sisteme server:

Get-ADComputer -Filter (Sistem de operare -Ca „* Windows Server *”) -Proprietăți Sistem de operare | Selectați Nume, Sistem de operare | Format-Tabel – AutoSize

Obțineți o listă de servere dintr-un domeniu cu versiunea sistemului de operare și Service Pack instalate:
Get-ADComputer -Filter (Sistem de operare -Ca „* Windows Server *”) -Proprietate * | Format-Nume tabel, OperatingSystem, OperatingSystemServicePack -Wrap -Auto

Pentru a șterge toate conturile de computer dintr-un domeniu care nu au mai fost în domeniu de mai mult de 6 luni, puteți folosi comanda:

get-adcomputer -properties lastLogonDate -filter * | unde ($ _. lastLogonDate -lt (get-date) .addluni (-6)) | Eliminați-ADComputer

Selectați computere dezactivate într-o anumită OU:

Get-ADComputer -filter * -SearchBase „OU = Computers, dc = winitpro, dc = loc” | Unde-Obiect ($ _. Activat -eq $ False)

Rezultatele executării comenzii pot fi exportate într-un fișier text:

Get-ADComputer -Filter (Sistem de operare -Ca „* Windows Server *”) -Proprietăți Sistem de operare | Selectați Nume, Sistem de operare | Format-Table -AutoSize C: \ Script \ server_system.txt

Sau fișier CSV:

Get-ADComputer -Filter * -Property * | Selectare-Nume obiect, OperatingSystem, OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Codificare UTF8

Pentru a efectua o anumită acțiune cu toate computerele din lista rezultată, trebuie să utilizați bucla Foreach. În acest exemplu, dorim să formăm o listă de servere din domeniu (lista ar trebui să conțină numele serverului, producătorul și modelul serverului).

$ Calculatoare = Get-ADComputer -Filter (Sistem de operare -Ca „* Windows Server *”)
Foreach ($ Computer în $ Computers)
{
$ Hostname = $ Computer.Name
$ ComputerInfo = (Get-WmiObject -Numele calculatorului$ Nume gazdă Win32_ComputerSystem)
$ Producător = $ Calculator.Producător
$ Model = $ Computer.Model
Scriere-Host „Nume: $ Nume gazdă”
Write-Host „Producător: $ Manufacturer”
Write-Host „Model: $ Model”
Scriere-gazdă „”
$ Conținut = „$ Nume gazdă; $ Producător; $ Model”
Adauga continut -Valoare$ Conținut -Cale„C: \ PS \ ServersInfo.txt”
}

Alternativ, puteți utiliza o sintaxă de buclă mai scurtă. Să presupunem că trebuie să rulăm o comandă specifică pe toate computerele dintr-o anumită OU (în acest exemplu, vrem să rulăm comanda de actualizare a politicii de grup pe toate serverele):

get-adcomputer -SearchBase "OU = Servers, DC = winitpro, DC = loc" -Filter * | % (Invoke-Command -Computer $ _. Nume -ScriptBlock (gpupdate / force))

După cum știți, una dintre modalitățile de a importa utilizatori în bloc este să importați utilizatori din Active Directory. Cu toate acestea, unele restricții sunt impuse acestei opțiuni de import:

  1. Nu este posibilă reimportarea datelor pentru utilizatorii existenți în sistem.
  2. Componenta de import nu poate fi rulată din linia de comandă în modul offline.
  3. Nu există nicio modalitate de a importa informații suplimentare despre cont din Active Directory (se încarcă doar informațiile necesare pentru a genera un utilizator).

În timpul următoarei implementări a sistemului, clientul a stabilit cerințe stricte pentru importul utilizatorilor din catalog:

  1. Ar trebui să fie posibilă importarea în mod repetat a datelor pentru utilizatorii existenți pentru a actualiza informațiile despre acești utilizatori (deconectarea unui cont, încărcarea certificatelor, grupuri de utilizatori etc.)
  2. Import de grupuri personalizate de tipuri Organization Units si Universal Groups, tinand cont de ierarhia din Active Directory. Actualizarea informațiilor despre intrarea utilizatorului într-un anumit grup.
  3. Import de certificate personalizate.
  4. Conectați automat un cont de utilizator la o intrare de director existentă Muncitorii.
  5. Importul adresei de e-mail a utilizatorului (utilizat ulterior pentru a trimite notificări despre sarcini noi).
  6. Închiderea contului de utilizator al sistemului DIRECTUM, dacă este dezactivat în Active Directory.
  7. Lucrați offline prin linia de comandă pentru sarcinile atribuite.

În urma lucrărilor, a fost dezvoltată o soluție sub forma unui script care îndeplinește aceste cerințe. Din funcționalitatea principală a scriptului, se pot remarca următoarele:

  • Importul unui cont de utilizator. Numele de utilizator și numele complet sunt importate.
  • Import de grupuri personalizate. Sunt importate grupurile de utilizatori cărora le aparține contul de director (se importă grupurile cu tipul Unitate de organizare și Grupuri universale). Aceasta ia în considerare ierarhia directorului de domenii.
  • Import de certificate personalizate. Sunt importate certificatele de cont de director valide și certificatele în așteptare pentru semnare și criptare.
  • Ștergerea/închiderea contului.Ștergerea unui nume de utilizator și închiderea unei intrări din director Utilizatori când contul de director este dezactivat.
  • Conectarea unui cont la un angajat. Contul de utilizator este legat de înregistrarea directorului Muncitorii, pentru care valoarea recuzitei este aceeași Nume I.O. cu numele complet calificat al contului director.
  • Importul unei adreseE-Poștă. Dacă contul de utilizator importat a fost conectat la o înregistrare Muncitorii, apoi pentru intrarea corespunzătoare din director Persoane adresa de e-mail a utilizatorului este înregistrată.

Scriptul vă permite să lucrați în modul vizual (când trebuie să procesați unul sau mai multe conturi) și în modul ascuns (când toate conturile sunt procesate fără participarea unui administrator).

Ei bine, pentru claritate, voi da un exemplu de lucru vizual al scenariului.

Deci, rulând scriptul, configurați parametrii de import și faceți clic O.K :

În pasul următor, selectăm utilizatorii importați. Transferăm utilizatorii necesari din coloana din stânga în cea din dreapta și apăsăm butonul O.K :

După ce utilizatorii sunt importați, vedem un mesaj despre sfârșitul scriptului:

Putem vedea ce acțiuni au fost efectuate cu conturile în jurnalul de import.

Platforma de dezvoltare: DIRECTUM 4.6.1.
Pachetul de dezvoltare și tehnologie. Descriere:
Funcția corectată pentru script:

Dedicat utilizării PowerShell pentru administrarea AD. Ca punct de plecare, am decis să iau 10 sarcini comune de administrare AD și să mă uit la modul în care pot fi simplificate folosind PowerShell:

  1. Resetați parola utilizatorului
  2. Activați și dezactivați conturile
  3. Deblocați contul de utilizator
  4. sterge-ti contul
  5. Găsiți grupuri goale
  6. Adăugați utilizatori în grup
  7. Enumerați membrii grupului
  8. Găsiți conturi de computer învechite
  9. Dezactivați contul de computer
  10. Găsiți computere după tip

În plus, autorul menține un blog (folosind PowerShell, desigur), vă recomandăm să aruncați o privire - jdhitsolutions.com/blog. Și cele mai relevante pe care le poți obține de pe twitterul lui twitter.com/jeffhicks.
Deci, mai jos este traducerea articolului „Top 10 Active Directory Tasks Rezolvate cu PowerShell”.

Gestionarea Active Directory (AD) cu Windows PowerShell este mai ușoară decât credeți și vreau să vă dovedesc acest lucru. Puteți pur și simplu să luați scripturile de mai jos și să le utilizați pentru a rezolva o serie de sarcini de gestionare AD.

Cerințe

Pentru a utiliza PowerShell pentru a gestiona AD, există mai multe cerințe care trebuie îndeplinite. Voi demonstra cum funcționează cmdleturile AD pe un computer cu Windows 7, ca exemplu.
Pentru a utiliza cmdleturile, trebuie să aveți un controler de domeniu Windows Server 2008 R2 sau puteți descărca și instala serviciul Active Directory Management Gateway pe DC-uri vechi. Citiți cu atenție documentația înainte de instalare; Este necesară repornirea CD-ului.
Pe partea client, descărcați și instalați (RSAT) fie pentru Windows 7, fie pentru Windows 8. În Windows 7, va trebui să deschideți în Panouri de control capitol Programeși alegeți Activați sau dezactivați funcțiile Windows... Găsi Instrumente de administrare la distanță a serveruluiși extindeți secțiunea Instrumente de administrare a rolurilor... Selectați elementele adecvate pentru AD DS și AD LDS Tools, în special rețineți că articolul trebuie selectat Modul Active Directory pentru Windows PowerShell așa cum se arată în Figura 1. (În Windows 8, toate instrumentele sunt selectate implicit). Acum suntem gata de plecare.

Figura 1 Activarea instrumentelor AD DS și AD LDS

Sunt autentificat cu un cont cu drepturi de administrator de domeniu. Majoritatea cmdlet-urilor pe care le voi afișa vă vor permite să specificați acreditări alternative. Oricum, recomand să citești ajutorul ( Obține ajutor) și exemple pe care le voi demonstra mai jos.
Porniți o sesiune PowerShell și importați modulul:

PS C: \> Import-Module ActiveDirectory

Importul creează un nou PSDrive, dar nu îl vom folosi. Cu toate acestea, puteți vedea ce comenzi sunt în modulul importat.

PS C: \> get-command -module ActiveDirectory

Frumusețea acestor comenzi este că, dacă pot folosi o comandă pentru un obiect AD, atunci poate fi folosită pentru 10, 100 și chiar 1000. Să vedem cum funcționează unele dintre aceste cmdleturi.

Sarcina 1: Resetați parola utilizatorului

Să începem cu o sarcină tipică: resetarea parolei unui utilizator. Acest lucru se poate face ușor și simplu prin cmdlet Set-ADAccountPassword... Partea dificilă este că noua parolă trebuie calificată ca un șir securizat: o bucată de text care este criptată și stocată în memorie pe parcursul sesiunii PowerShell. Mai întâi, să creăm o variabilă cu o nouă parolă:
PS C: \> $ new = Read-Host „Introduceți noua parolă” -AsSecureString

Apoi, să introducem o nouă parolă:

Acum putem prelua contul (folosind samAccountname Este cea mai bună opțiune) și setați o nouă parolă. Iată un exemplu pentru utilizatorul Jack Frost:

PS C: \> Set-ADAccountPassword jfrost -NewPassword $ nou

Din păcate, există o eroare cu acest cmdlet: -Trece prin, -Ce-ar fi dacă, și -A confirma nu funcționează. Dacă preferați o scurtătură, încercați următoarele:

PS C: \> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String " [email protected]"-forta)

Ca rezultat, trebuie ca Jack să schimbe parola data viitoare când mă conectez și modific contul folosind Set-ADUser.

PS C: \> Set-ADUser jfrost -ChangePasswordAtLogon $ True

Rezultatele rulării cmdlet-ului nu sunt scrise în consolă. Dacă trebuie făcut, utilizați -Adevărat... Dar pot afla dacă operațiunea a avut succes sau nu prin extragerea numelui de utilizator folosind cmdletul Get-ADUser si specificarea proprietatii Parola a expirat așa cum se arată în figura 2.


Orez. 2. Rezultatele cmdlet-ului cmdlet Get-ADUser cu proprietatea PasswordExpired

Concluzie: Resetarea parolei unui utilizator folosind PowerShell nu este deloc dificilă. Mărturisesc că resetarea parolei este, de asemenea, ușoară printr-o clipă. Utilizatori și computere Active Directory consolă Microsoft Management Console (MMC). Dar utilizarea PowerShell este în regulă dacă trebuie să delegați o sarcină, nu doriți să implementați snap-in-ul menționat mai sus sau să vă resetați parola într-un proces IT automat mare.

Sarcina 2: Activați și dezactivați conturile

Acum haideți să dezactivăm contul. Să continuăm să lucrăm cu Jack Frost. Acest cod folosește parametrul -Ce-ar fi dacă, pe care îl puteți vedea în alte cmdleturi care fac modificări pentru a-mi testa comanda fără a o rula.

PS C: \> Disable-ADAccount jfrost -whatif Ce se întâmplă dacă: Efectuarea operației „Set” pe țintă „CN = Jack Frost, OU = personal, OU = Testare, DC = GLOBOMANTICS, DC = local”.

Acum să dezactivăm pe bune:

PS C: \> Dezactivați-ADAccount jfrost

Și când este timpul să vă activați contul, ce cmdlet ne va ajuta?

PS C: \> Enable-ADAccount jfrost

Aceste cmdleturi pot fi utilizate într-o expresie pipeline, permițându-vă să activați sau să dezactivați câte conturi doriți. De exemplu, acest cod dezactivează toate conturile din departamentul de vânzări.

PS C: \> get-aduser -filter "departament -eq" vânzări "" | dezactivare-adaccount

Desigur, scriind un filtru pentru Get-ADUser destul de complicat, dar aici se folosește parametrul -Ce-ar fi dacăîmpreună cu cmdletul Dezactivați-ADAcont vine în ajutor.

Sarcina 3: Deblocați contul de utilizator

Luați în considerare o situație în care Jack și-a blocat contul în timp ce încerca să introducă o nouă parolă. În loc să încerce să-și găsească contul prin GUI, procedura de deblocare se poate face cu o comandă simplă.

PS C: \> Deblocați-ADAccount jfrost

Cmdletul acceptă și parametrii -Ce-ar fi dacăși -A confirma.

Sarcina 4: Ștergeți contul

Nu contează câți utilizatori ștergeți, este ușor de făcut cu cmdletul Eliminare-ADUser... Nu vreau să-l elimin pe Jack Frost, dar dacă aș vrea, aș folosi cod ca acesta:

PS C: \> Remove-ADUser jfrost -whatif Ce se întâmplă dacă: Efectuarea operației „Eliminare” pe țintă „CN = Jack Frost, OU = personal, OU = Testare, DC = GLOBOMANTICS, DC = local”.

Sau pot introduce mai mulți utilizatori și îi șterg cu o singură comandă simplă:

PS C: \> get-aduser -filter "enabled -eq" false "" -property WhenChanged -SearchBase "OU = Angajați, DC = Globomantics, DC = Local" | unde ($ _. WhenChanged -le (Get-Date) .AddDays (-180)) | Remove-ADuser -whatif

Această comandă va găsi și elimina toate conturile dezactivate ale angajaților OU care nu s-au schimbat timp de 180 de zile sau mai mult.

Sarcina 5: Găsirea grupurilor goale

Managementul grupului este nesfârșit și ingrat. Există multe modalități de a găsi grupuri goale. Unele expresii pot funcționa mai bine decât altele, în funcție de organizația dvs. Codul de mai jos va găsi toate grupurile dintr-un domeniu, inclusiv cele încorporate.

PS C: \> get-adgroup -filter * | unde (-Nu ($ _ | get-adgroupmember)) | Selectați Nume

Dacă aveți grupuri cu sute de membri, atunci folosirea acestei comenzi poate fi consumatoare de timp; Get-ADGroupMember verifică fiecare grup. Dacă puteți limita sau personaliza, va fi mai bine.
Iată o altă abordare:

PS C: \> get-adgroup -filter "members -notlike" * "-AND GroupScope -eq" Universal "" -SearchBase "OU = Groups, OU = Employees, DC = Globomantics, DC = local" | Selectați Nume, Grup *

Această comandă găsește toate grupurile universale care nu au calitatea de membru al grupurilor OU și afișează unele dintre proprietăți. Rezultatul este prezentat în Figura 3.


Orez. 3. Căutarea și filtrarea grupurilor universale

Sarcina 6: Adăugarea utilizatorilor la grup

Să adăugăm Jack Frost la grupul IT din Chicago:

PS C: \> add-adgroupmember "chicago IT" -Membri jfrost

Da, atât de simplu. De asemenea, puteți adăuga cu ușurință sute de utilizatori în grupuri, deși acest lucru este puțin ciudat în opinia mea:

PS C: \> Add-ADGroupMember „Chicago Employees” -member (get-aduser -filter „city -eq” Chicago „”)

Am folosit expresia pentru a găsi toți utilizatorii care au o proprietate City în Chicago. Codul din paranteză este executat și obiectele rezultate sunt trecute la parametrul –Member. Fiecare obiect personalizat este adăugat la grupul Chicago Employees. Nu contează dacă avem de-a face cu 5 sau 5000 de utilizatori, actualizarea apartenenței la grup durează doar câteva secunde. Această expresie poate fi scrisă și folosind Pentru fiecare-obiect, care ar putea fi mai convenabil:

PS C: \> Get-ADUser -filter "city -eq" Chicago "" | foreach (Add-ADGroupMember „Chicago Employees” - Membru $ _)

Sarcina 7: Afișarea unei liste de membri ai grupului

Poate doriți să știți cine face parte dintr-un anumit grup. De exemplu, ar trebui să aflați periodic cine este membru al grupului Administratori de domeniu:

PS C: \> Get-ADGroupMember „Administratori de domeniu”

Figura 4 arată rezultatul.


Orez. 4. Membrii grupului Domain Admins

Cmdletul listează obiectul AD pentru fiecare membru al grupului. Dar cum rămâne cu grupurile imbricate? Grupul meu Chicago All Users este o colecție de grupuri imbricate. Pentru a obține o listă cu toate conturile, trebuie doar să folosesc parametrul – Recursiv.

PS C: \> Get-ADGroupMember „Chicago toți utilizatorii” -Recursiv | Selectați DistinguishedName

Dacă doriți să mergeți în altă direcție - găsiți la ce grupuri aparține utilizatorul - utilizați proprietatea utilizatorului Membru al:

PS C: \> get-aduser jfrost -property Memberof | Selectați -ExpandProperty memberOf CN = NewTest, OU = Groups, OU = Angajați, DC = GLOBOMANTICS, DC = local CN = Chicago Test, OU = Groups, OU = Angajați, DC = GLBOMANTICS, DC = local CN = Chicago IT, OU = Grupuri, OU = angajați, DC = GLOBOMANTICS, DC = local CN = Chicago Sales Users, OU = Grupuri, OU = angajați, DC = GLBOMANTICS, DC = local

Am folosit parametrul -ExpandProperty pentru a afișa nume Membru al ca şirurile.

Sarcina 8: Găsiți conturi de computer învechite

Mi se pune adesea această întrebare: „Cum găsesc conturi de computer învechite?” Și mereu răspund: „Ce este depășit pentru tine?” Companiile diferă în definițiile lor privind momentul în care un cont de computer (sau utilizator, nu contează) este depreciat și nu mai poate fi utilizat. În ceea ce mă privește, sunt atent la acele conturi pentru care parolele nu au fost modificate pentru o anumită perioadă de timp. Această perioadă pentru mine este de 90 de zile - dacă computerul nu a schimbat parola împreună cu domeniul în această perioadă, cel mai probabil este offline și depășit. Este folosit cmdletul Get-ADComputer:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Selectați numele, ultimul set de parolă

Filtrul funcționează excelent cu o valoare grea, dar acest cod se va actualiza pentru toate conturile de computer care nu și-au schimbat parolele de la 1 ianuarie 2012. Rezultatele sunt prezentate în Figura 5.


Orez. 5. Găsiți conturi de computer învechite

O altă opțiune: să presupunem că sunteți cel puțin la nivelul funcțional al unui domeniu Windows 2003. Filtrați după proprietate LastLogontimeStamp... Această valoare este numărul de intervale de 100 de nanosecunde de la 1 ianuarie 1601 și este stocată în GMT, așa că lucrul cu această valoare este puțin complicat:

PS C: \> get-adcomputer -filter „LastlogonTimestamp -gt 0” -proprietăți * | selectați numele, lastlogontimestamp, @ (Nume = "LastLogon"; Expresie = (:: FromFileTime ($ _. Lastlogontimestamp))), passwordlastset | Sortați LastLogonTimeStamp


Orez. 6. Convertiți valoarea LastLogonTimeStamp în formatul obișnuit

Pentru a crea un filtru, trebuie să convertesc o dată, de exemplu 1 ianuarie 2012, în formatul corect. Conversia se realizează în FileTime:

PS C: \> $ cutoff = (Get-Date "1/1/2012"). ToFileTime () PS C: \> $ cutoff 129698676000000000

Acum pot folosi această variabilă în filtru pentru Get-ADComputer:

PS C: \> Get-ADComputer -Filter "(lastlogontimestamp -lt $ cutoff) -sau (lastlogontimestamp -notlike" * ")" -property * | Selectați Nume, LastlogonTimestamp, PasswordLastSet

Codul de mai sus găsește aceleași computere prezentate în Figura 5.

Sarcina 9: Dezactivați contul de computer

Poate că atunci când găsiți conturi inactive sau învechite, doriți să le dezactivați. Acest lucru este destul de ușor de făcut. Vom folosi același cmdlet pe care l-am folosit cu conturile de utilizator. Îl puteți rafina folosind samAccountname cont.

PS C: \> Disable-ADAccount -Identity "chi-srv01 $" -whatif What if: Efectuarea operației "Set" pe țintă "CN = CHI-SRV01, CN = Computers, DC = GLOBOMANTICS, DC = local".

Sau folosind o expresie canalizată:

PS C: \> get-adcomputer "chi-srv01" | Dezactivați-ADAcont

De asemenea, pot folosi codul meu pentru a găsi conturi învechite și pentru a le dezactiva pe toate:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Dezactivați-ADAcont

Sarcina 10: Găsiți computere după tip

De asemenea, mi se pune adesea întrebarea cum să găsesc conturi de computer după tip, cum ar fi servere sau stații de lucru. Acest lucru necesită o anumită cantitate de creativitate din partea dvs. Nu există nimic în AD care să diferențieze serverul de client, cu excepția poate sistemul de operare. Dacă computerul dvs. rulează Windows Server 2008, trebuie să urmați câțiva pași suplimentari.
Mai întâi, trebuie să obțineți o listă de sisteme de operare, apoi filtrăm conturile după sistemul de operare disponibil.

PS C: \> Get-ADComputer -Filter * -Properties OperatingSystem | Selectați OperatingSystem -unique | Sortați sistemul de operare

Rezultatele sunt prezentate în Figura 7.


Orez. 7. Extrageți lista OS

Vreau să găsesc toate computerele care au un sistem de operare server:

PS C: \> Get-ADComputer -Filter "OperatingSystem-like" * Server * "" -properties OperatingSystem, OperatingSystem ServicePack | Selectați Nume, Op * | lista de format

Rezultatele sunt prezentate în Figura 8.

Ca și în cazul altor cmdlet-uri AD Get, puteți personaliza parametrii de căutare și puteți restricționa interogarea la anumite OU, dacă este necesar. Toate expresiile pe care le-am arătat pot fi integrate în expresii mari PowerShell. De exemplu, puteți sorta, grupa, aplica filtre, exporta în CSV sau puteți crea și trimite rapoarte HTML prin e-mail - totul din PowerShell! În acest caz, nu trebuie să scrieți un singur scârțâit.
Iată un bonus pentru tine: raportul privind vârsta parolei utilizatorului salvat într-un fișier HTML:

PS C: \> Get-ADUser -Filter "Activat -eq" Adevărat "-ȘI ParolăNeverExpires -eq" False "" -Proprietăți PasswordLastSet, PasswordNeverExpires, PasswordExpired | Selectați DistinguishedName, Name, pass *, @ (Nume = „PasswordAge”; Expresie = ((Get-Date) - $ _. PasswordLastSet)) | sort PasswordAge -Descending | ConvertTo-Html -Title "(! LANG: Raport privind vârsta parolei" | Out-File c:\Work\pwage.htm !}

Deși această expresie poate părea puțin intimidantă, cu puține cunoștințe despre PowerShell este ușor de utilizat. Și rămâne doar ultimul sfat: cum să definiți o proprietate personalizată numită PasswordAge... Valoarea reprezintă intervalul dintre astăzi și proprietatea PasswordLastSet. Apoi sortez rezultatele pentru noua mea proprietate. Figura 9 arată rezultatul pentru micul meu domeniu de testare.

Actualizare:
Postarea conține traducerea articolului de pe portal

Top articole similare