Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Script despre cum să obțineți toate caracteristicile unui cont de domeniu. Excel în loc de PowerShell: interogări către AD și rapoarte de sistem „pe genunchi”

Script despre cum să obțineți toate caracteristicile unui cont de domeniu. Excel în loc de PowerShell: interogări către AD și rapoarte de sistem „pe genunchi”

Bună ziua, dragi cititori și abonați, continuăm să studiem capacitățile Powershell și Director activ. După cum vă amintiți, toate conturile ei de utilizator și computer sunt localizate în baza de date NTDS.dit, totul este grozav și centralizat. Atunci când o companie are mai mult de un administrator de sistem, poate apărea o situație în care se acumulează gunoi și acreditări inutile. Cu toții suntem oameni și putem uita unele lucruri, iar în unele momente putem fi distrași, ceea ce va duce și la uitare. Informații importante. Și ajungem la concluzia că Directorul Actvie nu se acumulează utilizatori activi(demis sau uitat), în orice caz, un administrator de sistem bun ar trebui să le identifice, să le dezactiveze și apoi să le ștergă dacă se dorește, ceea ce vom face.

Prin snap-in ADUC

Data trecută v-am dat deja un exemplu de utilizare a snap-in-ului Active Directory Users and Computers, prin care am căutat computere lipsă în rețeaua locală care nu mai apăreau de o lună. Acum vom face același lucru cu conturile de utilizator. Am AD activat Windows Server 2012 R2, deschideți ADUC, pentru a face acest lucru apăsați WIN+R și introduceți dsa.msc.

În formularul de solicitare care se deschide, introduceți:

  • Cerere nume > pentru mine aceștia sunt utilizatori pierduți
  • Descriere dacă este necesar
  • Solicitați rădăcină > aici puteți lăsa întregul domeniu sau îl puteți specifica pe OU dorit

Apoi faceți clic pe butonul de solicitare.

În fila utilizatori vedem elementul „Număr de zile de la ultima logareîn sistem” am stabilit 60 de zile de exemplu.

Ca urmare, veți primi lista de conturi de angajați inactivi de care aveți nevoie.

Prin snap-in Powershell

Același lucru se poate face prin Powershell. Îți voi da imediat codul a cărui sarcină este să cauți utilizatori inactivi, pentru aceasta am ales o perioadă de 45 de zile, dezactivând datele utilizatorului și mutându-le într-o OU special desemnată.

$date_with_offset= (Get-Date).AddDays(-45)
$users = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | Sortați LastLogonDate
foreach ($user în $users) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Declanșat,ou=Moscova L. utilizatori,ou=Locație,dc=msk,dc= contoso,dc=com")
Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | Sortează LastLogonDate | Nume FT, LastLogonDate -AutoSize | Out-Fișier c:\Script\users.txt

  • În prima linie declarați o variabilă în care setați termenul de căutare
  • Creați o variabilă și faceți o selecție bazată pe ultima oră de conectare
  • Mutarea utilizatorilor

  • Efectuarea unui raport la un dosar

Lucruri mai utile despre lucrul cu utilizatorul. Înainte de a utiliza comenzile de mai jos, trebuie să încărcați modulul Active Directory prin intermediul comenzii

Get-Help Get-ADUser

În comentariile la articolul precedent, ne-am amintit despre contabilitate în Excel în loc de 1C. Ei bine, haideți să verificăm cât de mult cunoașteți Excel. Astăzi vă voi arăta cum să obțineți date din Active Directory și să lucrați cu ele fără macrocomenzi și PowerShell - doar cu mecanisme Office standard. De exemplu, puteți obține cu ușurință analize privind utilizarea sistemelor de operare în organizația dvs. dacă nu aveți deja ceva de genul Microsoft SCOM. Ei bine, sau pur și simplu încălzește-te și ia-ți mintea de la scenarii.


Desigur, puteți obține datele ca în exemplele de mai jos literalmente cu o singură linie în PowerShell. Dar, în primul rând, PowerShell este prea plictisitor și, în al doilea rând, Excel poate actualiza dinamic datele - documentele rezultate pot fi publicate online și uitate de actualizarea lor.

Pentru a lucra cu date, voi folosi mecanismul Power Query. Pentru Office 2010 și 2013 va trebui să instalați un plugin; Microsoft Office 2016 are deja acest modul încorporat. Din păcate, ediția standard nu este suficientă pentru noi; vom avea nevoie de Professional.


Mecanismul în sine este conceput pentru a primi și procesa date dintr-o varietate de surse - de la ODBC vechi și fișiere text, la Exchange, Oracle și Facebook. Mai multe detalii despre mecanism și limbajul de scripting încorporat „M” au fost deja scrise pe Habré, dar voi analiza câteva exemple de utilizare a Power Query pentru a obține date din Active Directory.

Încălzire: să vedem când s-au conectat utilizatorii noștri

Solicitarea către baza de date a domeniului în sine este creată în fila „Date ― Solicitare nouă ― Din alte surse ― Din Active Directory”.



Specificați sursa de date.


Va trebui să selectați un nume de domeniu și să furnizați informațiile necesare de conectare. Apoi, selectați tipul de obiecte, în acest exemplu - utilizator. În partea dreaptă a ferestrei de previzualizare, interogarea rulează deja, afișând previzualizare date.



Pregătim o cerere și admirăm previzualizarea.


Ar trebui să pregătiți solicitarea în avans făcând clic pe butonul „editați” și selectând coloanele necesare. În esență, aceste coloane sunt clase. Fiecare dintre ele conține un set de atribute specifice ale unui obiect Active Directory, cu excepția coloanei principale. Numele de afișare, care în sine este un atribut. Mă voi concentra pe cursuri utilizator, persoană, topȘi securitatePrincipal. Acum trebuie să selectați atributele cerute din fiecare clasă folosind „extensia” - o pictogramă cu două săgeți la antetul coloanei:

  • Clasă utilizator extinde prin alegere lastLogonTimestampȘi userAccountControl;
  • V persoană hai sa alegem număr de telefon;
  • V topcând este creat;
  • si in securitatePrincipalSamAccountName.


Extindem cererea.


Acum să setăm filtrul: în special, pentru a nu obține conturi blocate, atributul userAccountControl trebuie să aibă valoarea 512 sau 66048. Filtrul poate fi diferit în mediul dumneavoastră. Puteți citi mai multe despre atribut în documentația Microsoft.



Aplicarea unui filtru.


Uneori, Excel detectează incorect formatul datelor, în special valoarea atributului lastLogonTimestamp. Dacă o astfel de nenorocire ți se întâmplă brusc, poți seta formatul corect în fila „Convertire”.

Acum, coloana userAccountControl ar trebui ștearsă - nu este deloc necesară pe afișaj. Și faceți clic pe „Descărcați și închideți”.


Rezultatul este o farfurie care are nevoie doar de mici retușuri de finisare. De exemplu, redenumiți coloanele în ceva mai ușor de citit. Și personalizați actualizare automata date.


Actualizarea automată la deschiderea unui tabel sau prin timeout este configurată în fila „Date” din „Proprietăți”.



Configurarea actualizării datelor.


După finalizarea instalării actualizării, puteți oferi în siguranță tabelul departamentului de personal sau serviciului de securitate - spuneți-i cine s-a conectat la sistem și când.


Codul de solicitare în limba „M” se află sub spoiler.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Categorii de obiecte"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,( „organizationalPerson”, „shadowAccount”, „posixAccount”, „msExchOmaUser”, „msExchBaseClass”, „msExchIMRecipient”, „msExchCertificateInformation”, „msExchMultiMediaUser”, „msExchMailStorage”, „msExchCustomAstinguishedme”, „distinguishedme”, „) #"Expanded element securityPrincipal" = Table.ExpandRecordColumn(#"Coloane eliminate", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Expanded element top" = Table.ExpandRecordColumn(#"Expanded element securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"Expanded element person" = Table.ExpandRecordColumn(#"Expanded element top", "person", ("telephoneNumber"), ("telephoneNumber") ")), #"Expanded element user" = Table.ExpandRecordColumn(#"Expanded element person", "user", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Rânduri cu filtru aplicat" = Table.SelectRows(#"Element utilizator extins", fiecare ( = 512 sau = 66048)), #"Tip modificat" = Table.TransformColumnTypes(#"Rânduri cu filtru aplicat",(("lastLogonTimestamp", type datetime))), #"Remoted columns1" = Table.RemoveColumns(#"Changed type", ("userAccountControl")) în #"Remoted columns1"

Noi creăm carte de adrese, sau ce să faci când portal corporativ nu este prietenos cu AD

O altă variantă folosind Excelîmpreună cu Active Directory - aceasta este formarea unei agende de adrese pe baza datelor AD. Este clar că agenda va fi actualizată doar dacă domeniul este în regulă.


Să creăm o cerere pentru un obiect utilizator, extindeți clasa utilizator V Poștă, și clasa persoană V număr de telefon. Să ștergem toate coloanele, cu excepția distinsName― structura domeniului repetă structura întreprinderii, deci numele Unități organizaționale corespund denumirilor departamentelor. În mod similar, grupurile de securitate pot fi folosite ca bază pentru numele departamentelor.


Acum de la linie CN=Nume de utilizator, OU=Departament de contabilitate, OU=Divizii, DC=domeniu, DC=ru trebuie să extrageți direct numele departamentului. Cel mai simplu mod de a face acest lucru este să utilizați delimitatorii din fila Transformare.



Extragerea textului.


Eu folosesc ca delimitatori OU=Și ,OU=. În principiu, o virgulă este suficientă, dar o joc în siguranță.



Introduceți delimitatori.


Acum, folosind filtrul, puteți tăia inutil OU, cum ar fi utilizatorii blocați și incorporat, configurați sortarea și încărcați datele în tabel.



Vedere a tabelului rezumativ.

Raport rapid asupra compoziției posturilor de lucru, fără a introduce agenți sau alt preparat

Acum să încercăm să creăm un tabel util obținând date pe computere. Să facem un raport asupra sistemelor de operare utilizate de companie: pentru aceasta vom crea o solicitare, dar de data aceasta în navigator vom selecta calculator.



Facem o cerere pentru obiectul computer.


Să lăsăm clasele coloanei calculatorȘi topși extinde-le:

  • Clasă calculator extinde prin alegere cn, sistem de operare, Operating SystemServicePackȘi OperatingSystemVersion;
  • in clasa top hai sa alegem când este creat.


Cerere avansată.


Dacă doriți, puteți face un raport numai pe sistemele de operare server. De exemplu, filtrați după atributul operatingSystem sau operatingSystemVersion. Nu voi face acest lucru, dar voi corecta afișarea timpului de creație - mă interesează doar anul. Pentru a face acest lucru, în fila „Conversie”, selectați coloana de care avem nevoie și selectați „Anul” în meniul „Data”.



Extragem anul din momentul în care computerul a intrat în domeniu.


Acum tot ce rămâne este să ștergeți coloana de nume afișat ca inutilă și să încărcați rezultatul. Datele sunt gata. Acum puteți lucra cu ei ca la o masă obișnuită. Mai întâi, să creăm un tabel pivot în fila „Inserare” - " Masă rotativă" Să fim de acord cu alegerea sursei de date și să configuram câmpurile acesteia.



Setările câmpului tabelului pivot.


Acum nu mai rămâne decât să personalizați designul după gustul dvs. și să admirați rezultatul:



Tabel rezumat pentru calculatoare în AD.


Dacă doriți, puteți adăuga o diagramă rezumat, de asemenea, în fila „Inserare”. În „Categorie” (sau în „Rânduri”, după gust) adăugați sistem de operare, la date ― cn. În fila „Design”, puteți alege tipul de diagramă care vă place; eu am preferat diagrama circulară.



Graficul proporțiilor.


Acum este clar că, în ciuda actualizării în curs, numărul total de stații de lucru cu Windows XP și servere cu Windows 2003 este destul de mare. Și există ceva pentru care să lupți.


Codul de solicitare este sub spoiler.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Categorii de obiecte"], computer1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(computer1,( "user", "organizationalPerson", "persoana")), #"Other removed columns" = Table.SelectColumns(#"Remoted columns", ("displayName", "computer", "top")), #"Expand item computer" = Table.ExpandRecordColumn(#"Alte coloane la distanță", "computer", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " operatingSystemVersion")), #"Extended top" = Table.ExpandRecordColumn(#"Expanded computer", "sus", ("whenCreated"), ("whenCreated")), #"Extracted year" = Table.TransformColumns( #" Elementul extins de sus",(("când a fost creat", Data.Anul))), #"Coloane la distanță1" = Table.RemoveColumns(#"An extras",("nume afișat")) în #"Coloane la distanță1"

Adaugă etichete

Dedicat utilizării PowerShell pentru a administra AD. Ca punct de plecare, autorul a decis să ia 10 sarcini comune de administrare AD și să analizeze cum 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 într-un grup
  7. Listează membrii grupului
  8. Găsiți conturi de computer învechite
  9. Dezactivați un cont 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 puteți obține cele mai actualizate informații de pe Twitter-ul său twitter.com/jeffhicks.
Deci, mai jos este traducerea articolului „Top 10 Active Directory Tasks Rezolvate cu PowerShell”.

Control activ Directory (AD) folosind Windows PowerShell este mai ușor decât credeți și vreau să vă demonstrez. 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, trebuie să îndepliniți mai multe cerințe. Voi demonstra cum funcționează cmdleturile AD folosind 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. Vă rugăm să 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. Pe Windows 7, va trebui să deschideți în Panouri de control capitol Programeși alegeți Porniți sau opriți caracteristici ferestre(Activați sau dezactivați funcțiile Windows). Găsi Server la distanta Instrumente de administrareș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 Director activ Modul pentru Windows PowerShell, așa cum se arată în Figura 1. (În Windows 8, toate instrumentele sunt selectate implicit). Acum suntem gata de lucru.

Fig.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. În orice caz, 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 disponibile în modulul importat.

PS C:\> get-command -module ActiveDirectory

Frumusețea acestor comenzi este că, dacă pot folosi o comandă pe un obiect AD, atunci poate fi folosită pe 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. Puteți face acest lucru ușor și simplu folosind un cmdlet Set-ADAccountPassword. Partea dificilă este că Parolă Nouă trebuie să fie calificat ca șir protejat: o bucată de text care este criptată și stocată în memorie pe durata unei sesiuni PowerShell. Mai întâi, să creăm o variabilă cu noua parolă:
PS C:\> $new=Read-Host „Introduceți noua parolă” -AsSecureString

Apoi, introduceți o nouă parolă:

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

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

Din păcate, există o eroare cu acest cmdlet: -Trece prin, -Și dacă, Și -A confirma nu funcționează. Dacă preferați o comandă rapidă, încercați asta:

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

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

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

Rezultatele rulării cmdlet-ului nu sunt scrise în consolă. Dacă acest lucru trebuie făcut, utilizați -Adevărat. Dar pot afla dacă operația a avut succes sau nu prin preluarea 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 Get-ADUser cu proprietatea PasswordExpired

Concluzie: Resetarea parolei unui utilizator folosind PowerShell nu este deloc dificilă. Recunosc că resetarea parolei este, de asemenea, ușoară prin snap Utilizatori și computere Active Directory console Management Microsoft Consolă (MMC). Dar folosind PowerShell Potrivit dacă trebuie să delegați o sarcină, nu doriți să implementați snap-in-ul menționat mai sus sau dacă resetați o parolă ca parte a unui 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 -Și dacă, pe care îl puteți găsi în alte comadlete 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=staff,OU=Testing,DC=GLOBOMANTICS,DC=local”.

Acum să-l dezactivăm pe bune:

PS C:\> Dezactivați-ADAAccount jfrost

Și când va veni momentul să activăm 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 va dezactiva toate conturile din departamentul de vânzări

PS C:\> get-aduser -filter „departament -eq „vânzări”” | disable-adaccount

Desigur, scrieți un filtru pentru Get-ADUser destul de complicat, dar aici se utilizează parametrul -Și 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 folosind o comandă simplă.

PS C:\> Deblocare-ADAAccount jfrost

Cmdletul acceptă și parametrii -Și dacăȘi -A confirma.

Sarcina 4: Ștergeți contul

Nu contează câți utilizatori eliminați - este ușor de făcut folosind cmdletul Remove-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=staff,OU=Testing,DC=GLOBOMANTICS,DC=local”.

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

PS C:\> get-aduser -filter „activat -eq „fals”” -proprietate 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 șterge toate conturile dezactivate pentru angajați, care nu au fost modificate timp de 180 de zile sau mai mult.

Sarcina 5: Găsirea grupurilor goale

Gestionarea grupurilor este o sarcină 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 din 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 utilizarea acestei comenzi poate dura mult 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 apartenență la grupurile OU și afișează unele dintre proprietăți. Rezultatul este prezentat în Figura 3.


Orez. 3. Căutați și filtrați grupurile universale

Sarcina 6: Adăugarea de utilizatori la un 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 la grupuri, deși mi se pare puțin ciudat:

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 proprietatea City în Chicago. Codul din paranteze este executat și obiectele rezultate sunt trecute la parametrul –Member. Fiecare obiect utilizator este adăugat la grupul Chicago Employees. Nu contează dacă avem de-a face cu 5 sau 5000 de utilizatori, actualizarea membrilor grupului durează doar câteva secunde. Această expresie poate fi scrisă și folosind Pentru fiecare-obiect ce ar putea fi mai convenabil:

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

Sarcina 7: Enumerați membrii 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 afișează obiectul AD pentru fiecare membru al grupului. Ce să faci 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 în ce grupuri se află un utilizator - 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ții, DC=GLOBOMANTICS,DC=local CN=Chicago IT,OU= Grupuri, OU=Angajați, DC=GLOBOMANTICS,DC=local CN=Chicago Sales Users,OU=Grupuri,OU=Angajați, DC=GLOBOMANTICS,DC=local

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

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

Mi se pune foarte des această întrebare: „Cum găsesc conturi de computer învechite?” Și mereu răspund: „Ce este depășit pentru tine?” Companiile au definiții diferite pentru momentul în care un cont de computer (sau un cont de utilizator, nu contează) este considerat învechit și nu mai poate fi utilizat. În ceea ce mă privește, sunt atent la acele conturi ale căror parole nu au fost modificate anumită perioadă 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. Cmdlet folosit 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ă ești cel puțin la nivel funcțional domeniul 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” -properties * | selectați numele,lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),passwordlastset | Sortați LastLogonTimeStamp


Orez. 6. Convertiți valoarea LastLogonTimeStamp într-un format familiar

Pentru a crea un filtru, trebuie să convertesc data, 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 a Get-ADComputer:

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

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

Sarcina 9: Dezactivați contul de computer

Poate că atunci când găsiți conturi inactive sau învechite, veți dori să le dezactivați. Acest lucru este destul de ușor de făcut. Vom folosi același cmdlet pe care l-am folosit pentru a lucra cu conturile de utilizator. Îl poți clarifica 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 pipeline:

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, sunt adesea întrebat cum să găsesc conturi de computer după tip, cum ar fi servere sau stații de lucru. Acest lucru necesită puțină creativitate din partea dvs. Nu există nimic în AD care să distingă un server de un client, cu excepția poate sistemul de operare. Dacă computerul dvs. rulează Windows Server 2008, va trebui să faceți câțiva pași suplimentari.
În primul rând, trebuie să obțineți o listă de sisteme de operare, apoi filtrăm conturile după sistemele de operare disponibile.

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

Rezultatele sunt prezentate în Figura 7.


Orez. 7. Preluarea listei OS

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

PS C:\> Get-ADComputer -Filtru „Sistem de operare -cum ar fi „*Server*”” -proprietăți OperatingSystem,OperatingSystem ServicePack | Selectați Nume, Op* | lista de format

Rezultatele sunt prezentate în Figura 8.

Ca și alte cmdlet-uri AD Get, puteți personaliza parametrii de căutare și puteți limita solicitarea la anumite OU, dacă este necesar. Toate expresiile pe care le-am arătat pot fi integrate în expresii PowerShell mai mari. De exemplu, puteți sorta, grupa, aplica filtre, exporta în CSV sau puteți crea și trimite prin e-mail rapoarte HTML - totul din PowerShell! În acest caz, nu va trebui să scrieți un singur script.
Iată un bonus: un raport privind vârsta parolei utilizatorului, salvat într-un fișier HTML:

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

Deși această expresie poate părea puțin intimidantă, este ușor de utilizat cu cunoștințe minime despre PowerShell. Și rămâne doar un ultim sfat: cum să definiți o proprietate personalizată numită PasswordAge. Valoarea reprezintă decalajul 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 o traducere a articolului de pe portal

Astăzi vom încerca să descarcăm o listă cu toți utilizatorii într-un fișier separat din Active Directory. Asistentul nostru principal în această problemă va fi PowerShell. Chestia este că Microsoft a plănuit inițial consola de comandă PowerShell ca instrument principal pentru gestionarea componentelor serverului Windows. Și astăzi, când avem deja versiunea 2.0, conform în general, chiar asa este.

Chiar și în trecutul recent, pentru a interacționa cumva cu AD, administratorii trebuiau să aibă la dispoziție fie utilitarul dsquery, fie diferite feluri scripturi sau utilitare. Începând de azi versiuni Windows Server 2008 R2, putem lucra cu AD prin PowerShell. Odată cu apariția PowerShell 2.0, acesta este folosit pentru a interacționa cu Active Directory modul special Modulul Active Directory pentru Windows PowerShell, care conține lista necesară de cmdlet-uri. Pentru sarcinile noastre vom folosi comanda Get-ADUser.

Deci, în funcție de care este sub control sistem de operare vom lansa consola PowerShell, va trebui să facem „pași pregătitori”.

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

  • Import-Module activedirectory – comandă pentru a importa un modul în AD

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

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

Este de remarcat faptul că cmdletul Get-ADUser este recomandat să fie executat 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, trebuie să rulați următoarea comandă:

  • Get-ADUser -filter * – exportați o listă de utilizatori AD

Această descărcare nu este complet informativă și nu se potrivește cu totul în fereastră. informatie necesara. Prin urmare, să încercăm să restrângem căutarea și să afișăm proprietățile utilizator specific cu numele user1:

  • Get-ADUser -identity user1 -properties * – exportați proprietățile unui anumit utilizator

Acum să încercăm să exportăm lista tuturor utilizatorilor cu proprietățile lor către un extern txt sau csv fişier:

  • Get-ADUser -filter * -properties * | Export-csv -path c:\users.csv -encoding Unicode – exportați utilizatorii într-un fișier separat

Aș dori să acord o atenție deosebită cheii -codificarea Unicode. Acesta servește pentru a se asigura că alfabetul chirilic rus, după exportul din AD, poate 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, prin urmare, nu pot fi citite. Pentru a schimba acest lucru, trebuie să facem următoarele:

Nu este un secret pentru nimeni că încă de la prima versiune de PowerShell, Microsoft a încercat să facă din acesta principalul instrument de administrare Windows. Și în multe feluri funcționează! Azi pe exemple simple, vă vom arăta capabilitățile PowerShell pe care le puteți utiliza pentru a obține o varietate de informații despre utilizatorii Active Directory și atributele acestora.

Notă. Anterior, pentru a obține informații despre atributele conturilor de utilizator AD, trebuia să utilizați diverse instrumente: consola ADUC (inclusiv), un utilitar etc. Alegerea instrumentului s-a bazat de obicei pe sarcina la îndemână și pe abilitățile de programare ale administratorului.

PowerShell 2.0 a introdus un modul special pentru lucrul cu Active Directory - (introdus în Windows Server 2008 R2), ale cărui cmdlet-uri vă permit să efectuați diverse manipulări cu obiecte de director AD. Cmdletul este utilizat pentru a obține informații despre utilizatorii domeniului Active Directory și proprietățile acestora Get-ADUser. Puteți utiliza cmdletul Get-ADUser pentru a obține valoarea oricărui atribut al unui cont de utilizator existent în AD. În plus, puteți specifica diverse criterii de selecție și puteți genera liste de utilizatori de domeniu și atributele acestora.

În acest exemplu, vă vom arăta cum să utilizați cmdletul PowerShell Get-ADUser pentru a prelua informații despre când parola unui utilizator a fost modificată ultima dată și când expiră.

Lansați fereastra Powershll cu drepturi de administrator și importați modulul Active Directory cu comanda:

Import-Module activedirectory

Sfat. În Windows Server 2012 și versiuni ulterioare, puteți sări peste acest element, deoarece modulul PowerShell activ Directorul este conectat implicit.

În sistemele de operare client (Windows 10, de exemplu), pentru ca comandantul Get-AdUser să funcționeze, trebuie să instalați versiunea corespunzătoare de RSAT și să activați componenta în panoul de control Modul Active Directory pentru Windows PowerShell(Instrumente de administrare a serverului la distanță -> Instrumente de administrare a rolurilor -> Instrumente AD DS și AD LDS -> Instrumente AD DS).

O listă completă a tuturor argumentelor cmdlet-ului Get-ADUser poate fi obținută după cum urmează:

Ajută Get-ADUser

Pentru a afișa o listă a tuturor conturilor de domeniu, executați comanda:

Get-ADUser -filter *

Formatul listei returnate nu este foarte convenabil de utilizat, sunt afișate doar câteva 10 de bază din peste 120 de atribute și proprietăți ale conturilor de utilizator (DN, SamAccountName, Name, UPN etc.) în plus, vedem că există nu există informații despre ora ultimei modificări a parolei.

Pentru a afișa informații complete despre toate atributele disponibile ale utilizatorului tuser, rulați comanda:

Get-ADUser -identity tuser -properties *

Deci, vedem o listă completă a atributelor utilizatorului AD și a valorilor acestora asociate cu contul de utilizator. În continuare, vom trece la formatarea ieșirii cmdlet-ului Get-ADUser, astfel încât să fie afișate câmpurile de care avem nevoie. Suntem interesați de atributele:

  • Parola a expirat
  • PasswordLastSet
  • Parola nu expira niciodata

Să rulăm comanda:

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires

Acum datele utilizatorului conțin informații despre data modificării parolei și ora la care aceasta va expira. Să prezentăm informațiile într-o formă tabelară mai convenabilă:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Nume, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Pentru a afișa datele utilizatorului dintr-o anumită unitate organizatorică, utilizați parametrul SearchBase:

Get-ADUser -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Nume, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Rezultatul comenzii poate fi exportat într-un fișier text:

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

Sau în CSV, care va fi exportat în mod convenabil în Excel în viitor (folosind suplimentar sortare-obiect Să sortăm tabelul după coloana PasswordLastSet și să adăugăm, de asemenea, o condiție 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:\temp\user-password-expires-2015.csv

Astfel, puteți construi un tabel cu toate atributele necesare Utilizatori activi Director.

Pentru a obține o listă de conturi de utilizator AD pe baza unei caracteristici specifice, utilizați parametrul –Filter. Ca argumente pentru acest parametru, puteți specifica valoarea anumitor atribute de utilizator Active Directory, ceea ce va face ca cmdlet-ul Get-ADUser să fie aplicat utilizatorilor care corespund criteriilor de filtru.

Rezultatele utilizatorilor AD al căror nume începe cu Roman:

Get-ADUser -filter (nume -cum ar fi „Roman*”)

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

Lista tuturor conturilor active (neblocate) din AD:

Get-ADUser -Filter (Activat -eq „True”) | Selectați-obiect SamAccountName,Name,Nume,GivenName | Format-Tabel

Lista de conturi cu expirat acțiuni privind parola:

Get-ADUser -filter (Activat -eq $True) -properties passwordExpired | unde($_.Parola a expirat)

Lista de conturi active cu adrese de e-mail:

Get-ADUser -Filter ((mail -ne "null") -și (Activat -eq "true")) -Properties Nume,Prenume,Poștă | Selectați-Nume obiect, Prenume, Nume, e-mail | Format-Tabel

Sarcină: pentru o listă de conturi care sunt stocate într-un fișier text (un cont pe linie), trebuie să obțineți numărul de telefon al utilizatorului în AD și să încărcați informațiile într-un fișier text csv (poate fi importat cu ușurință în Esxel).

Import-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Properties Name, telephoneNumber | Select Name, telephoneNumber | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 )

Următorul exemplu vă permite să descărcați agenda companiei în formular fișier csv, care poate fi importat ulterior în Outlook sau Mozilla Thunderbird:

Get-ADUser -Filter ((mail -ne "null") -și (Activat -eq "true")) -Properties Nume,Prenume,Poștă | Selectați-Nume obiect, Prenume, Nume, e-mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\mail_list.csv

Utilizatori care nu și-au schimbat parola în ultimele 90 de zile:

$90_Days = (Get-Date).adddays(-90) Get-ADUser -filter ((passwordlastset -le $90_days))

$user = Get-ADUser winadmin -Properties thumbnailPhoto $user.thumbnailPhoto | Set-Content winadmin.jpg -Encoding byte

Lista grupurilor din care face parte contul de utilizator

Get-AdUser winadmin -Properties memberof | Selectați memberof -expandproperty memberof

Cele mai bune articole pe această temă