Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Zanimljivo
  • Uklanjanje blokiranih korisnika iz ad powershell-a. Pronađite neaktivne korisnike u Active Directoryju

Uklanjanje blokiranih korisnika iz ad powershell-a. Pronađite neaktivne korisnike u Active Directoryju

Danas ćemo pokušati da izbacimo listu svih korisnika u zasebnu datoteku iz Active Directory-a. PowerShell će biti naš glavni pomoćnik u ovoj stvari. To je zato što je Microsoft prvobitno planirao PowerShell Shell kao primarni alat za upravljanje komponentama Windows servera. A danas, kada već imamo verziju 2.0, uglavnom je tako.

Čak iu nedavnoj prošlosti, da bi na neki način stupili u interakciju sa AD, administratori su morali imati na raspolaganju ili dsquery uslužni program, ili sve vrste skripti ili uslužnih programa. Danas, počevši od Windows Server 2008 R2, možemo raditi sa AD preko PowerShell-a. Sa pojavom PowerShell-a 2.0, koristi se poseban modul za interakciju sa Active Directory-jem Modul Active Directory za Windows PowerShell koji sadrži potrebnu listu cmdlet-a. Za naše zadatke koristit ćemo naredbu Get-ADUser.

Dakle, u zavisnosti od toga na kom operativnom sistemu ćemo pokrenuti PowerShell konzolu, moraćemo da izvršimo "pripremne korake".

1) Ako radimo ispod Windows Servera do verzije 2012, tada trebamo izvršiti naredbu:

  • Uvozni modul aktivni direktorij - komanda za uvoz modula u AD

Za verzije operativnog sistema od 2012. i novije, ovaj modul je već uključen po defaultu.

2) Ako radimo sa bilo kojeg klijentskog Windowsa, onda na njega mora biti instaliran RSAT paket za udaljenu administraciju, sa instaliranom komponentom Active Directory Module za Windows PowerShell.

Vrijedi napomenuti da se cmdlet Get-ADUser preporučuje za pokretanje kada je količina podataka koji se otpremaju do 1000 korisnika.

Izvoz AD korisnika koristeći PowerShell u zasebnu datoteku

Prvo, pozovimo pomoć za naredbu Get-ADUser. Kao rezultat toga, dobićete sve potrebne komande za dalju administraciju.

  • pomoć Get-ADUser - komanda za pozivanje pomoći

Da biste dobili listu svih korisnika sa svim svojstvima u prozoru PowerShell, pokrenite sljedeću naredbu:

  • Get-ADUser -filter * - izvoz liste korisnika AD

Ovaj istovar nije u potpunosti informativan i ne uklapa sve potrebne informacije u prozor. Stoga, pokušajmo suziti pretragu i prikazati svojstva određenog korisnika po imenu user1:

  • Get-ADUser -identitet korisnik1 -svojstva * - izvoz svojstava određenog korisnika

Sada pokušajmo da izvezemo listu svih korisnika sa njihovim svojstvima na eksterni. txt ili csv fajl:

  • Get-ADUser -filter * -svojstva * | Export-csv -path c: \ users.csv -encoding Unicode - izvoz korisnika u poseban fajl

Posebno bih skrenuo pažnju na ključ -kodiranje Unicode... Koristi se da bi se ruska ćirilica, nakon izvoza iz AD, mogla ispravno prikazati u učitanom fajlu. Na primjer, kroz Microsoft Excel ćemo vidjeti upitnike umjesto ruskih slova.

Kada pregledate datoteku, podaci se izvoze u jednom redu i stoga nisu čitljivi. Da bismo ovo promijenili, moramo uraditi sljedeće:

Posvećeno korišćenju PowerShell-a za AD administraciju. Kao početnu tačku, odlučio sam uzeti 10 uobičajenih AD administracijskih zadataka i pogledati kako se oni mogu pojednostaviti korištenjem PowerShell-a:

  1. Resetujte korisničku lozinku
  2. Aktivirajte i deaktivirajte račune
  3. Deblokirajte korisnički račun
  4. Izbrišite svoj nalog
  5. Pronađite prazne grupe
  6. Dodajte korisnike u grupu
  7. Navedite članove grupe
  8. Pronađite zastarjele račune računara
  9. Deaktivirajte račun računara
  10. Pronađite računare po vrsti

Osim toga, autor održava blog (koristeći PowerShell, naravno), preporučujemo da pogledate - jdhitsolutions.com/blog. I najrelevantnije što možete dobiti sa njegovog twittera twitter.com/jeffhicks.
Dakle, u nastavku je prijevod članka “Top 10 Active Directory zadataka riješenih pomoću PowerShell-a”.

Upravljanje Active Directory-om (AD) pomoću Windows PowerShell-a je lakše nego što mislite, i želim vam to dokazati. Možete jednostavno uzeti donje skripte i koristiti ih za rješavanje brojnih zadataka upravljanja AD.

Zahtjevi

Da biste koristili PowerShell za upravljanje AD, postoji nekoliko zahtjeva koji se moraju ispuniti. Na primjeru ću pokazati kako AD cmdleti rade na Windows 7 računaru.
Da biste koristili cmdlete, morate imati Windows Server 2008 R2 kontroler domene ili možete preuzeti i instalirati Active Directory Management Gateway Service na zastarjelim DC-ovima. Pažljivo pročitajte dokumentaciju prije instaliranja; Potrebno je ponovno pokretanje CD-a.
Na strani klijenta preuzmite i instalirajte (RSAT) za Windows 7 ili Windows 8. U Windows 7, moraćete da otvorite u Control Panels poglavlje Programi i biraj Uključite ili isključite Windows funkcije... Nađi Alati za udaljenu administraciju servera i proširite odjeljak Alati za administraciju uloga... Odaberite odgovarajuće stavke za AD DS i AD LDS alate, posebno imajte na umu da stavka mora biti odabrana Modul Active Directory za Windows PowerShell kao što je prikazano na slici 1. (U Windows 8, svi alati su odabrani po defaultu). Sada smo spremni za polazak.

Slika 1 Omogućavanje AD DS i AD LDS alata

Prijavljen sam sa nalogom sa administratorskim pravima domene. Većina cmdleta koje ću pokazati omogućit će vam da navedete alternativne vjerodajnice. U svakom slučaju, preporučujem čitanje pomoći ( Get-Help) i primjere koje ću pokazati u nastavku.
Pokrenite PowerShell sesiju i uvezite modul:

PS C: \> Uvozni modul ActiveDirectory

Uvoz stvara novi PSDrive, ali ga nećemo koristiti. Međutim, možete vidjeti koje su naredbe u uvezenom modulu.

PS C: \> get-command -module ActiveDirectory

Ljepota ovih naredbi je u tome što ako mogu koristiti naredbu za jedan AD objekat, onda se može koristiti za 10, 100, pa čak i 1000. Hajde da vidimo kako neke od ovih cmdlet-a rade.

Zadatak 1: Resetujte korisničku lozinku

Počnimo s tipičnim zadatkom: resetiranje korisničke lozinke. Ovo se može učiniti lako i jednostavno putem cmdleta Set-ADAccountPassword... Teški dio je da nova lozinka mora biti kvalificirana kao siguran niz: dio teksta koji je šifriran i pohranjen u memoriji tijekom PowerShell sesije. Prvo, napravimo varijablu s novom lozinkom:
PS C: \> $ new = Read-Host "Unesite novu lozinku" -AsSecureString

Zatim, unesite novu lozinku:

Sada možemo povratiti račun (koristeći samAccountname To je najbolja opcija) i postavite novu lozinku. Evo primjera za korisnika Jacka Frosta:

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

Nažalost, postoji greška sa ovim cmdlet-om: -Passthru, -Šta ako, i – Potvrdi ne radi. Ako više volite prečicu, pokušajte sljedeće:

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

Kao rezultat toga, treba mi Jack da promijeni lozinku sljedeći put kada se prijavim, a ja modificiram račun koristeći Set-ADUser.

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

Rezultati pokretanja cmdleta se ne zapisuju u konzolu. Ako je potrebno, koristite -Tačno... Ali mogu saznati da li je operacija bila uspješna ili ne tako što ću izdvojiti korisničko ime pomoću cmdleta Get-ADUser i specificiranje imovine PasswordExpired kao što je prikazano na slici 2.


Rice. 2. Rezultati cmdleta Get-ADUser Cmdlet sa svojstvom PasswordExpired

Zaključak: Poništavanje lozinke korisnika pomoću PowerShell-a uopće nije teško. Priznajem da je poništavanje lozinke također jednostavno u trenutku. Korisnici i računari Active Directory konzola Microsoft upravljačka konzola (MMC). Ali korištenje PowerShell-a je u redu ako trebate delegirati zadatak, ne želite primijeniti gore spomenuti dodatak ili resetirati svoju lozinku u velikom automatiziranom IT procesu.

Zadatak 2: Aktivirajte i deaktivirajte račune

Sada deaktivirajmo nalog. Nastavimo raditi sa Jackom Frostom. Ovaj kod koristi parametar -Šta ako, što možete vidjeti u drugim cmdletima koji unose promjene kako bi testirali moju komandu bez njenog pokretanja.

PS C: \> Disable-ADAccount jfrost -whatif Šta ako: Izvođenje operacije "Set" na cilju "CN = Jack Frost, OU = osoblje, OU = Testiranje, DC = GLOBOMANTICS, DC = lokalno".

Sada deaktivirajmo stvarno:

PS C: \> Disable-ADAccount jfrost

A kada dođe vrijeme da aktivirate svoj račun, koji cmdlet će nam pomoći?

PS C: \> Enable-ADAccount jfrost

Ove cmdlet komande se mogu koristiti u cevovodnom izrazu, omogućavajući vam da aktivirate ili deaktivirate onoliko naloga koliko želite. Na primjer, ovaj kod deaktivira sve račune u odjelu prodaje.

PS C: \> get-aduser -filter "department -eq" sales "" | disable-adaccount

Naravno, pisanje filtera za Get-ADUser prilično zeznuto, ali ovdje se koristi parametar -Šta ako zajedno sa cmdlet-om Disable-ADAccount dolazi u pomoć.

Zadatak 3: Otključajte korisnički račun

Zamislite situaciju u kojoj je Jack zaključao svoj račun dok je pokušavao unijeti novu lozinku. Umjesto pokušaja da se pronađe njegov račun preko GUI-a, postupak otključavanja može se obaviti jednostavnom komandom.

PS C: \> Unlock-ADAccount jfrost

Cmdlet takođe podržava parametre -Šta ako i -Potvrdi.

Zadatak 4: Izbrišite nalog

Nije važno koliko korisnika izbrišete, to je lako učiniti pomoću cmdlet-a Remove-ADUser... Ne želim ukloniti Jacka Frosta, ali da želim, koristio bih kod ovako:

PS C: \> Remove-ADUser jfrost -whatif Šta ako: Izvođenje operacije "Ukloni" na cilju "CN = Jack Frost, OU = osoblje, OU = Testiranje, DC = GLOBOMANTICS, DC = lokalno".

Ili mogu unijeti više korisnika i izbrisati ih jednom jednostavnom naredbom:

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

Ova komanda će pronaći i ukloniti sve deaktivirane naloge OU zaposlenih koji se nisu mijenjali 180 dana ili više.

Zadatak 5: Pronalaženje praznih grupa

Grupno upravljanje je beskrajno i nezahvalno. Postoji mnogo načina da pronađete prazne grupe. Neki izrazi mogu funkcionirati bolje od drugih, ovisno o vašoj organizaciji. Kod ispod će pronaći sve grupe u domeni, uključujući one ugrađene.

PS C: \> get-adgroup -filter * | gdje (-Ne ($ _ | get-adgroupmember)) | Odaberite Ime

Ako imate grupe sa stotinama članova, onda korištenje ove naredbe može biti dugotrajno; Get-ADGroupMember provjerava svaku grupu. Ako možete ograničiti ili prilagoditi, bit će bolje.
Evo još jednog pristupa:

PS C: \> get-adgroup -filter "members -notlike" * "-AND GroupScope -eq" Universal "" -SearchBase "OU = Grupe, OU = Employees, DC = Globomantics, DC = lokalni" | Odaberite ime, grupu *

Ova komanda pronalazi sve univerzalne grupe koje nemaju članstvo u OU grupama i prikazuje neka svojstva. Rezultat je prikazan na slici 3.


Rice. 3. Pretraživanje i filtriranje univerzalnih grupa

Zadatak 6: Dodavanje korisnika u grupu

Dodajmo Jacka Frosta u čikašku IT grupu:

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

Da, tako je jednostavno. Također možete lako dodati stotine korisnika u grupe, iako je ovo malo nezgodno po mom mišljenju:

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

Koristio sam izraz u zagradama da pronađem sve korisnike koji imaju vlasništvo City u Chicagu. Kod u zagradama se izvršava i rezultirajući objekti se prosljeđuju parametru –Member. Svaki prilagođeni objekt se dodaje grupi Chicago Employees. Nije bitno da li imamo posla sa 5 ili 5000 korisnika, ažuriranje članstva u grupama traje samo nekoliko sekundi. Ovaj izraz se također može napisati pomoću ForEach-Object, što bi moglo biti zgodnije:

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

Zadatak 7: Prikaz liste članova grupe

Možda želite da znate ko je u određenoj grupi. Na primjer, trebali biste povremeno saznati ko je član grupe administratora domene:

PS C: \> Get-ADGroupMember "Domain Admins"

Slika 4 prikazuje rezultat.


Rice. 4. Članovi grupe administratora domene

Cmdlet navodi AD objekt za svakog člana grupe. Ali šta je sa ugniježđenim grupama? Grupa My Chicago All Users je zbirka ugniježđenih grupa. Da dobijem listu svih naloga, samo moram da koristim parametar –Rekurzivno.

PS C: \> Get-ADGroupMember "Chicago All Users" -Recursive | Odaberite DistinguishedName

Ako želite da idete drugim putem - pronađite kojim grupama korisnik pripada - koristite svojstvo korisnika Član:

PS C: \> get-aduser jfrost -property Memberof | Odaberite -ExpandProperty memberOf CN = NewTest, OU = Grupe, OU = Employees, DC = GLOBOMANTICS, DC = lokalni CN = Chicago Test, OU = Groups, OU = Employees, DC = GLOBOMANTICS, DC = lokalni CN = Chicago IT, OU = Grupe, OU = Zaposleni, DC = GLOBOMANTICS, DC = lokalni CN = Chicago Sales Users, OU = Grupe, OU = Zaposleni, DC = GLOBOMANTICS, DC = lokalni

Koristio sam parametar -ExpandProperty za prikaz imena Član kao žice.

Zadatak 8: Pronađite zastarjele račune računara

Često mi se postavlja ovo pitanje: "Kako da pronađem zastarele račune računara?" A ja uvijek odgovaram: "Šta je za vas zastarjelo?" Kompanije se razlikuju u svojim definicijama kada je račun računara (ili korisnika, nije važno) zastario i više nije upotrebljiv. Što se mene tiče, obraćam pažnju na one naloge za koje lozinke nisu menjane određeno vreme. Ovaj period za mene je 90 dana - ako računar nije promenio lozinku zajedno sa domenom tokom ovog perioda, najverovatnije je van mreže i zastareo. Koristi se cmdlet Get-ADComputer:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Odaberite ime, zadnja lozinka

Filter radi odlično sa tvrdom vrijednošću, ali ovaj kod će se ažurirati za sve račune računala koji nisu promijenili svoje lozinke od 1. januara 2012. Rezultati su prikazani na slici 5.


Rice. 5. Pronađite zastarjele račune računara

Druga opcija: pretpostavimo da ste barem na funkcionalnom nivou Windows 2003 domene. Filtrirajte prema svojstvu LastLogontimeStamp... Ova vrijednost je broj intervala od 100 nanosekundi od 1. januara 1601. i pohranjena je u GMT, tako da je rad s ovom vrijednošću pomalo težak:

PS C: \> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | odaberite ime, lastlogontimestamp, @ (Name = "LastLogon"; Expression = (:: FromFileTime ($ _. Lastlogontimestamp))), passwordlastset | Sortiraj LastLogonTimeStamp


Rice. 6. Pretvorite vrijednost LastLogonTimeStamp u uobičajeni format

Da kreiram filter, moram da konvertujem datum, na primer 1. januar 2012, u ispravan format. Konverzija se vrši u FileTime:

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

Sada mogu koristiti ovu varijablu u filteru za Get-ADComputer:

PS C: \> Get-ADComputer -Filter "(lastlogontimestamp -lt $ cutoff) -ili (lastlogontimestamp -notlike" * ")" -svojstvo * | Odaberite Ime, LastlogonTimestamp, PasswordLastSet

Gornji kod pronalazi iste računare prikazane na slici 5.

Zadatak 9: Deaktivirajte račun računara

Možda kada pronađete neaktivne ili zastarjele račune, želite ih deaktivirati. Ovo je prilično lako učiniti. Koristit ćemo isti cmdlet koji smo koristili s korisničkim nalozima. Možete ga poboljšati upotrebom samAccountname račun.

PS C: \> Disable-ADAccount -Identity "chi-srv01 $" -whatif Šta ako: Izvođenje operacije "Set" na cilju "CN = CHI-SRV01, CN = Računari, DC = GLOBOMANTICS, DC = lokalno".

Ili korištenjem cjevovodnog izraza:

PS C: \> get-adcomputer "chi-srv01" | Disable-ADAccount

Također mogu koristiti svoj kod da pronađem zastarjele račune i deaktiviram ih sve:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Disable-ADAccount

Zadatak 10: Pronađite računare po tipu

Često mi se postavlja i pitanje kako pronaći račune računala po tipu, kao što su serveri ili radne stanice. Ovo zahtijeva određenu količinu kreativnosti s vaše strane. Ne postoji ništa u AD-u što razlikuje server od klijenta, osim možda OS-a. Ako vaš računar koristi Windows Server 2008, potrebno je preduzeti nekoliko dodatnih koraka.
Prvo morate dobiti listu OS-a, a zatim filtriramo račune prema dostupnom OS-u.

PS C: \> Get-ADComputer -Filter * -Properties OperatingSystem | Odaberite OperatingSystem -unique | Sortiraj operativni sistem

Rezultati su prikazani na slici 7.


Rice. 7. Izdvojite OS listu

Želim da pronađem sve računare koji imaju serverski OS:

PS C: \> Get-ADComputer -Filter "OperatingSystem -like" * Server * "" -properties OperatingSystem, OperatingSystem ServicePack | Odaberite Ime, Op * | format-list

Rezultati su prikazani na slici 8.

Kao i kod drugih AD Get cmdleta, možete prilagoditi svoje parametre pretraživanja i ograničiti upit na određene OU, ako je potrebno. Svi izrazi koje sam pokazao mogu se integrirati u velike PowerShell izraze. Na primjer, možete sortirati, grupirati, primijeniti filtere, izvoziti u CSV ili kreirati i slati HTML izvještaje - sve iz PowerShell-a! U ovom slučaju, ne morate napisati ni jednu škripu.
Evo bonusa za vas: izvještaj o starosti korisnika sačuvan u HTML fajlu:

PS C: \> Get-ADUser -Filter "Enabled -eq" True "-AND PasswordNeverExpires -eq" False "" -Properties PasswordLastSet, PasswordNeverExpires, PasswordExpired | Odaberite DistinguishedName, Name, pass *, @ (Name = "PasswordAge"; Expression = ((Get-Date) - $ _. PasswordLastSet)) | sortiraj PasswordAge -Descending | ConvertTo-Html -Title "(! LANG: Izvještaj o starosti lozinke" | Out-File c:\Work\pwage.htm !}

Iako ovaj izraz može izgledati pomalo zastrašujuće, uz malo znanja o PowerShell-u, jednostavan je za korištenje. I ostaje samo posljednji savjet: kako definirati prilagođeno svojstvo pod nazivom PasswordAge... Vrijednost predstavlja interval između današnjeg dana i svojstva PasswordLastSet. Zatim sortiram rezultate za svoju novu nekretninu. Slika 9 prikazuje izlaz za moj mali test domen.

Ažuriraj:
Objava sadrži prijevod članka na portalu

Koristi se za kreiranje, modificiranje i brisanje kataloških objekata. Korisnik također može koristiti naredbu ldifde da proširite šemu, izvezite informacije o korisnicima i grupi Active Directory u druge aplikacije ili usluge i popunite Active Directory Application Mode (ADAM) podacima iz drugih usluga direktorija.

Sintaksa

ldifde [-i] [-f Ime dokumenta] [-s server_name] [-c red1 red2] [-v] [-j put] [-t port_number] [-d DN_base] [-r LDAP_filter] [-p region] [-l LDAP_attribute_list] [-o LDAP_attribute_list] [-g] [-m] [-n] [-k] [-a ] [-b ] [-? ]

Parametri

-i Određuje način uvoza. Ako parametar nije naveden, po defaultu se koristi način izvoza. -fIme dokumenta Određuje naziv datoteke za uvoz ili izvoz. -sserver_name Određuje računar na kojem treba izvršiti operaciju uvoza ili izvoza. Po defaultu program ldifdeće se pokrenuti na računaru na kojem ldifde instaliran. -cred1 red2 Zamjenjuje sva pojavljivanja strings1 sadržaja strings2... Obično se koristi prilikom uvoza podataka s jedne domene na drugu, a istovremeno je potrebno zamijeniti razlikovno ime domene za izvoz ( string1), naziv uvozne domene ( string2). -v Omogućava opširni način evidentiranja. -jput Određuje lokaciju datoteke evidencije. Podrazumevana je trenutna putanja. -tport_number Određuje broj porta za Lightweight Directory Access Protocol (LDAP). Zadani LDAP port je 389. Port globalnog kataloga je 3268. -dDN_base Određuje prepoznatljivo ime baze pretraživanja za izvoz podataka. -rLDAP filter Kreira LDAP filter za pretraživanje za izvoz podataka. Na primjer, koristeći sljedeći filter, svi korisnici sa određenim srednjim imenom se izvoze: csvde -r (i (objectClass =Korisnik) (sn =Prezime)) -pregion Određuje opseg pretrage. Parametri opsega pretrage su Baza, OneLevel i SubTree. -lLDAP_attribute_list Određuje listu atributa koje treba vratiti u rezultatima zahtjeva za izvoz. Ako je ovaj parametar izostavljen, vraćaju se svi atributi. -oLDAP_attribute_list Određuje listu atributa koje treba izostaviti iz rezultata upita za izvoz. Obično se ovaj parametar koristi kada izvozite objekte iz Active Directory i zatim ih uvozite u drugi LDAP-kompatibilni direktorij. Ako neki atributi nisu podržani od strane drugog direktorija, oni se mogu isključiti iz skupa rezultata pomoću ovog parametra. -g Isključuje paginirana pretraživanja. -m Izostavljanje atributa koji se ne mogu napisati, kao što je ObjectGUID i objectSID. -n Izostavite izvoz binarnih vrijednosti. -k Zanemaruje greške tokom operacije uvoza i nastavlja obradu. Slijedi kompletna lista zanemarenih grešaka:

  • objekat je već član grupe;
  • kršenje klase objekta (što znači da navedena klasa objekta ne postoji) ako uvezeni objekat nema druge atribute;
  • objekat već postoji;
  • kršenje ograničenja;
  • atribut ili vrijednost već postoji;
  • takav objekat ne postoji.
-akorisničko ime lozinka lozinka Određuje izvršavanje naredbe pomoću navedenog razlikovno_ime korisnika i lozinka -b. -blozinka domene korisničkog imena Određuje naredbu koja će se izvršiti pomoću navedenog korisničko ime, domena i lozinka... Podrazumevano, naredba će se pokrenuti koristeći vjerodajnice korisnika koji je trenutno prijavljen na mrežu. Ne može se koristiti s parametrom -a. -? Prikazuje komandni meni.

Napomene

  • Sa parametrom -c možete koristiti konstante #schemaNamingContext i #configurationNamingContext umjesto razlikovnih imena odjeljka direktorija sheme i odjeljka direktorija konfiguracije.
  • Prilikom kreiranja datoteke za uvoz za naredbu ldifde, koristite vrijednost changeType da odredite vrstu promjena sadržanih u datoteci za uvoz. Vrijednosti changeType prikazani su u tabeli ispod.

Sljedeći je primjer LDAP datoteke za uvoz u LDIF formatu koja koristi vrijednost dodati:
DN: CN =odabrani_korisnik, DC =ime domena
tip promjene: dodati
CN: odabrani_korisnik
opis:file_description
objectClass: korisnik
objectClass: odabrani_korisnik

Primjeri

Da biste dohvatili samo prepoznatljivo ime, uobičajeno ime, ime, prezime i broj telefona vraćenih objekata, unesite:
-l istaknuto_ime, CN, ime, SN, telefon
Da biste isključili globalno jedinstveni identifikator (GUID) za objekt, unesite:
-o when_created, when_changed, Object_guid

Skripte za istovar svih korisnika iz MS Active Directory (ITGC)

Ivan Piskunov

Jedna od standardnih procedura revizije ITGC za katalog Aktivni direktorij je preuzimanje svih korisnika domene. Na osnovu primljenih podataka formiraju se procedure testiranja, na primjer, proučavanje liste administratora ili identifikacija korisnika sa isteklom lozinkom. Najefikasniji način za formiranje takvog rasterećenja bio bi korištenje standardnog interfejsa PowerShell , primjere kojih ćemo razmotriti u ovom članku

1. Ekspresno otpremanje pomoću PowerShell skripte

Ispod je PowerShell skripta kao jedan od najlakših i najbržih načina da dobijete listu svih korisnika AD domena u CSV formatu, koji se bez problema može otvoriti istim Excelom.

$ objSearcher = New-Object System.DirectoryServices.DirectorySearcher $ objSearcher.SearchRoot = "LDAP: // ou = Korisnici, ou = Departmets, dc = test, dc = ru" $ objSearcher.Filter = "(& (objectCategory = osoba) (! userAccountControl: 1.2.840.113556.1.4.803: = 2)) "$ users = $ objSearcher.FindAll () # Broj naloga $ users.Count $ korisnika | ForEach-Object ($ user = $ _. Svojstva New-Object PsObject -Property @ (Naslov = $ user.description Department = $ user.department Login = $ user.userprincipalname Telefon = $ user.telephonenumber Soba = $ user.physicaldeliveryofficename Puno ime = $ user.cn)) | Export-Csv -NoClobber -Encoding utf8 -Path C: list_domen_users.csv

Da bi skripta radila na vašem sistemu, potrebno je da je malo ispravite, odnosno unesete potrebne parametre, tj. kao u ovom primjeru ovo su parametri Korisnici u jedinici Odeljenja u domenu Test.ru. I također navedite putanju do lokacije na kojoj je datoteka spremljena list_domen_users.csv

Nakon istovara, ako odmah otvorite list_domen_users.csv , će izgledati u nečitljivom obliku, međutim, standardnim sredstvima možemo ga lako dovesti u format koji nam je potreban. Otvaranje u Excel-u list_domen_users.csv , odaberite prvu kolonu, zatim idite na karticu "Podaci" i kliknite na "Tekst po kolonama". Odaberite "razdvojeno" i kliknite "Dalje". Spremni!

Treba napomenuti da ova skripta neće prikazati više od 1000 korisnika. Prilično je pogodan za malu kompaniju, ali oni koji imaju ogroman broj korisnika u domeni trebali bi koristiti metode opisane u nastavku.

2. Napredni PowerShell cmdlet za preuzimanje preuzetih korisnika Active Directory

Active Directory Module za Windows PowerShell alat (uveden u Windows Server 2008 R2 i novijim) omogućava vam da generišete cmdlet komande koje izvode različite manipulacije sa objektima AD direktorijuma. Da biste dobili informacije o korisnicima i njihovim svojstvima, koristite cmdlet Get-ADUser.

Početi pokrenite Powershell prozor s administratorskim pravima i uvezite Active Directory modul za dalje radnje:
Uvozni modul aktivni direktorij

To navesti sve račune domene a, hajde da izvršimo naredbu:

Get-ADUser -filter *

To prikazati potpune informacije o svim dostupnim atributima korisnik tuser, pokrenite naredbu

Get-ADUser -identitet tuser -svojstva *


Na primjer, zainteresovani smo za informacije o datum kada je lozinka promijenjena i vrijeme kada ona ističe ... Rezultat izvršenja naredbe može se izvesti u tekstualnu datoteku:

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

Ili odmah prenijeti u CSV , koji će se ubuduće povoljno izvoziti u Excel (dodatno, koristeći sort-object, sortiraćemo tabelu po stupcu PasswordLastSet, a takođe ćemo dodati uslov gde - korisničko ime mora sadržati string "Dmitry")

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | gdje ($ _. ime –kao “* Dmitry *”) | sort-objek PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c: tempuser-password-expires-2015.csv

0

Imam sljedeću radnu skriptu koja provjerava da li je velika lista korisnika u CSV datoteci član AD grupe i zapisuje rezultate u results.csv.

Nisam siguran kako da konvertujem skriptu da bih mogao da promenim $group = "InfraLite" u $group = DC. \ List_Of_AD_Groups.CSV.

Dakle, skripta ne vraća samo podudaranja za jednu AD grupu, već vraća podudaranja za 80 AD grupa sadržanih u List_of_AD_groups.csv. Pisanje DA/NE za svaku oglasnu grupu u novoj CSV koloni (ili, ako to nije moguće, kreiranje zasebne CSV datoteke za svaku grupu sa rezultatima će također.

Mogao sam to učiniti ručno promjenom vrijednosti iz grupe $ i naziva datoteke za izvoz i ponovnim pokretanjem skripte 80 puta, ali morao sam biti brz sa PS-om da to uradim

npr. rezultati.csv?:

IME AD_GROUP1 AD_GROUP2 AD_GROUP80 itd itd. korisnik1 da ne da korisnik2 ne ne da korisnik3 ne da ne echo "UserName`InfraLite" >> results.csv $ users = GC. \ user_list.csv $ group = "InfraLite" $ members = Get-ADGroupMember -Identity $ group -Rekurzivno | Odaberite -ExpandProperty SAMAccountName foreach ($ korisnik u $ korisnika) (ako ($ članovi -sadrži $ korisnika) (echo "$ user $ group`tYes" >> results.csv) else (echo "$ user`tNo" >> rezultati .csv))

  • 2 odgovora
  • sortiranje:

    Aktivnost

0

Trivijalno rješenje vašeg problema bi bilo da umotate svoj postojeći kod u drugu petlju i kreirate izlaznu datoteku za svaku grupu:

$ groups = Get-Content "C: \ groups.txt" foreach ($ grupa u $ grupama) ($ members = Get-ADGroupMember ... ...)

Čistiji pristup bi bio kreiranje predloška mapiranja grupe, kloniranje za svakog korisnika i popunjavanje kopije korisnikovim članstvom u grupi. Ovako nešto bi trebalo raditi:

$ template = @ () Get-Content "C: \ groups.txt" | ForEach-Object ($ template [$ _] = $ false) $ groups = @ () Get-ADGroup -Filter * | ForEach-Object ($ grupe [$ _. DistinguishedName] = $ _. Ime) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ($ groupmap = $ template.Clone () $ _. MemberOf | ForEach-Object ($ groups [$ _]) | Where-Object ($ groupmap.ContainsKey ($ _)) | ForEach-Object ($ groupmap [$ _] = $ true) Novi-Objekat -Tip PSObjekat -Svojstvo $ groupmap) | Izvezi-Csv "C: \ user_group_mapping.csv" -NoType

0

Igrao sam se s ovim već neko vrijeme i mislim da sam našao način da dobiješ upravo ono što želiš.

Mislim da je Ansgar bio na pravom putu, ali nisam mogao da ga nateram da uradi ono što je uradio posle. Spomenuo je da u vrijeme pisanja ovog teksta nije imao pristup AD okruženju.

Evo šta sam smislio:

$ UserArray = Get-Content "C: \ Temp \ Users.txt" $ GroupArray = Get-Content "C: \ Temp \ Groups.txt" $ OutputFile = "C: \ Temp \ Something.csv" # Postavljanje hashtable za kasniju upotrebu $ UserHash = New-Object -TypeName System.Collections.Hashtable # Vanjska petlja za dodavanje korisnika i članstva u UserHash $ UserArray | ForEach-Object ($ UserInfo = Get-ADUser $ _ -Properties MemberOf # Skida LPAP sintaksu samo na SAMAccountName grupe $ Memberships = $ UserInfo.MemberOf | ForEach-Object (($ _. Split (",")) .replace ("CN =", "")) #Dodavanje para korisnika = članstvo u Hash $ UserHash.Add ($ _, $ Članstva)) # Vanjska petlja za kreiranje objekta po korisniku $ Results = $ UserArray | ForEach-Object (# Prvo kreirajte jednostavan objekat $ User = New-Object -TypeName PSCustomObject -Property @ (Name = $ _) # Dinamički dodajte članove objektu, na osnovu $ GroupArray $ GroupArray | ForEach-Object (#Provjera $ UserHash da vidite da li se grupa pojavljuje na listi članova korisnika $ UserIsMember = $ UserHash. ($ User.Name) -sadrži $ _ #Dodavanje svojstva objektu i vrijednost $ User | Add-Member -MemberType NoteProperty -Name $ _ -Value $ UserIsMember) #Vraćanje objekta u varijablu Return $ User) #Pretvorite objekte u CSV, a zatim ih ispišite $ Results | ConvertTo-CSV -NoTypeInformation | Out-File $ OutputFile

Nadajmo se da sve ima smisla. Komentirao sam koliko sam mogao. Bilo bi vrlo lako pretvoriti u ADSI da nemate instaliran RSAT na bilo kojoj mašini na kojoj ga pokrećete. Ako vam zatreba, javite mi i napravit ću neke brze promjene.

Top srodni članci