Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Zanimljiv
  • Uklanjanje blokiranih korisnika iz ad powershell-a. Pronalaženje neaktivnih korisnika u Active Directory

Uklanjanje blokiranih korisnika iz ad powershell-a. Pronalaženje neaktivnih korisnika u Active Directory

Danas ćemo pokušati prenijeti popis svih korisnika na zasebna datoteka iz Aktivni direktorij. Naš glavni pomoćnik u ovom pitanju bit će PowerShell. Stvar je u tome što je Microsoft isprva planirao naredbenu konzolu PowerShell kao glavni alat za upravljanje komponentama Windows poslužitelja. I danas, kada već imamo verziju 2.0, prema uglavnom, doista je tako.

Čak iu nedavnoj prošlosti, da bi nekako komunicirali s AD-om, administratori su morali imati na raspolaganju ili uslužni program dsquery ili razne vrste skripti ili uslužnih programa. Počevši od danas Windows verzije Server 2008 R2, možemo raditi s AD preko PowerShell-a. Pojavom PowerShell 2.0 koristi se poseban modul za interakciju s Active Directoryjem Modul Active Directory za Windows PowerShell , koji sadrži potreban popis cmdleti. Za naše zadatke koristit ćemo naredbu Get-ADUser.

Dakle, ovisno o tome koja je pod kontrolom operacijski sustav pokrenut ćemo PowerShell konzolu, morat ćemo izvršiti “pripremne korake”.

1) Ako radimo odozdo Windows poslužitelj do verzije 2012, tada moramo pokrenuti naredbu:

  • Import-Module activedirectory – naredba za uvoz modula u AD

Za verzije operativnog sustava od 2012. i novije, ovaj modul već omogućeno prema zadanim postavkama.

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

Vrijedno je napomenuti da se cmdlet Get-ADUser preporučuje za izvršavanje kada je količina podataka koji se učitavaju do 1000 korisnika.

Izvoz AD korisnika pomoću PowerShell-a u zasebnu datoteku

Prvo, pozovimo pomoć za naredbu Get-ADUser. Kao rezultat toga, dobit ćete sve potrebne naredbe za daljnju administraciju.

  • pomoć Get-ADUser – naredba za poziv pomoći

Da biste dobili popis svih korisnika sa svim svojstvima u PowerShell prozoru, morate pokrenuti sljedeću naredbu:

  • Get-ADUser -filter * – eksport popisa AD korisnika

Ovo preuzimanje nije posve informativno i ne staje sve u prozor. potrebne informacije. Stoga, pokušajmo suziti pretragu i prikazati svojstva konkretnog korisnika s imenom korisnik1:

  • Get-ADUser -identity user1 -properties * – izvoz svojstava određenog korisnika

Pokušajmo sada izvesti popis svih korisnika s njihovim svojstvima na vanjski txt ili csv datoteka:

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

Želio bih obratiti posebnu pozornost na ključ -kodiranje Unicode. Služi kako bi se osiguralo da se ruska ćirilica, nakon izvoza iz AD-a, može ispravno prikazati u učitanoj datoteci. Na primjer, putem Microsoft Excel vidjet ćemo upitnike umjesto ruskih slova.

Prilikom pregledavanja datoteke, podaci se izvoze u jednom retku i stoga nisu čitljivi. Da bismo to promijenili, moramo učiniti sljedeće:

Posvećen korištenju PowerShell-a za administraciju AD-a. Kao početnu točku, autor je odlučio uzeti 10 uobičajenih AD administrativnih zadataka i pogledati kako se oni mogu pojednostaviti korištenjem PowerShell-a:

  1. Ponovno postavljanje korisničke lozinke
  2. Aktivirajte i deaktivirajte račune
  3. Otključaj korisnički račun
  4. Izbrišite svoj račun
  5. Pronađite prazne grupe
  6. Dodajte korisnike u grupu
  7. Navedite članove grupe
  8. Pronađite zastarjele računalne račune
  9. Deaktivirajte račun računala
  10. Pronađite računala prema vrsti

Osim toga, autor vodi blog (koristeći PowerShell, naravno), preporučujemo da pogledate - jdhitsolutions.com/blog. A na njegovom Twitteru možete dobiti najsvježije informacije twitter.com/jeffhicks.
Dakle, u nastavku je prijevod članka “Top 10 Active Directory Tasks Solved with PowerShell”.

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

Zahtjevi

Da biste koristili PowerShell za upravljanje AD-om, morate ispuniti nekoliko zahtjeva. Pokazat ću kako rade AD cmdleti na računalu sa sustavom Windows 7 kao primjeru.
Da biste koristili cmdlete, morate imati kontroler domene Razina prozora Server 2008 R2 ili možete preuzeti i instalirati Active Directory Management Gateway Service na naslijeđene kontrolere domene (naslijeđeni DC-ovi). Pažljivo pročitajte dokumentaciju prije instalacije; Potrebno ponovno pokretanje CD-a.
Na strani klijenta preuzmite i instalirajte (RSAT) za Windows 7 ili Windows 8. U sustavu Windows 7 morat ćete se otvoriti Upravljačke ploče poglavlje Programi i izabrati Uključite ili isključite Značajke sustava Windows(Uključivanje ili isključivanje Windows značajki). Pronaći Udaljeni poslužitelj Alati za administraciju 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 sustavu Windows 8 svi su alati odabrani prema zadanim postavkama). Sada smo spremni za rad.

Slika 1 Omogućivanje AD DS-a i AD LDS alata

Prijavljen sam s računom s administratorskim pravima domene. Većina cmdleta koje ću pokazati omogućit će vam da navedete alternativne vjerodajnice. U svakom slučaju, preporučam čitanje pomoći ( Dobiti pomoć) i primjere koje ću demonstrirati u nastavku.
Pokrenite PowerShell sesiju i uvezite modul:

PS C:\> Import-Module ActiveDirectory

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

PS C:\> get-command -module ActiveDirectory

Ljepota ovih naredbi je u tome što ako mogu koristiti naredbu na jednom AD objektu, onda se ona može koristiti na 10, 100, pa čak i 1000. Pogledajmo kako neki od ovih cmdleta rade.

Zadatak 1: Ponovno postavite korisničku lozinku

Počnimo s tipičan zadatak: Ponovno postavite korisničku lozinku. To možete učiniti lako i jednostavno koristeći cmdlet Set-ADaccountPassword. Zamršeno je to što nova lozinka mora biti kvalificirana kao zaštićeni niz: dio teksta koji je šifriran i pohranjen u memoriji tijekom trajanja PowerShell sesije. Prvo, kreirajmo varijablu s novom lozinkom:
PS C:\> $new=Read-Host "Unesite novu lozinku" -AsSecureString

Zatim unesite novu lozinku:

Sada možemo izdvojiti račun (koristeći samAccountnamenajbolja opcija) i postavite novu lozinku. Evo primjera za korisnika Jack Frost:

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

Nažalost, postoji greška s ovim cmdlet-om: -Proći kroz, -Što ako, I – Potvrdi Ne radi. Ako više volite prečac, pokušajte ovo:

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

Kao rezultat toga, potrebno mi je da Jack promijeni svoju zaporku sljedeći put kad se prijavi, tako da mijenjam račun pomoću Postavi-ADUser.

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

Rezultati pokretanja cmdleta ne zapisuju se na konzolu. Ako to treba učiniti, upotrijebite -Pravi. Ali mogu saznati je li operacija bila uspješna ili ne dohvaćanjem korisničkog imena pomoću cmdleta Get-ADUser i navođenje svojstva Lozinka je istekla, kao što je prikazano na slici 2.


Riža. 2. Rezultati Get-ADUser cmdleta sa svojstvom PasswordExpired

Zaključak: poništite korisničku lozinku s koristeći PowerShell uopće nije teško. Priznajem da je poništavanje lozinke također lako putem snapa Active Directory korisnici i računala konzole Microsoftova upravljačka konzola (MMC). No korištenje PowerShell-a je prikladno ako trebate delegirati zadatak, ne želite implementirati gore spomenuti dodatak ili ponovno postavljate lozinku kao dio velikog automatiziranog IT procesa.

Zadatak 2: Aktivirajte i deaktivirajte račune

Sada deaktivirajmo račun. Nastavimo raditi s Jackom Frostom. Ovaj kod koristi parametar -Što ako, koje možete pronaći u drugim comadletima koji rade promjene da testiraju moju naredbu bez pokretanja.

PS C:\> Disable-ADAccount jfrost -whatif Što ako: Izvođenje operacije "Set" na cilju "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

Sada ga stvarno deaktivirajmo:

PS C:\> Onemogući-ADAAaccount jfrost

A kada dođe vrijeme za aktivaciju računa, koji cmdlet će nam pomoći?

PS C:\> Enable-ADAccount jfrost

Ovi cmdleti mogu se koristiti u cjevovodnom izrazu, omogućujući vam da aktivirate ili deaktivirate onoliko računa koliko želite. Na primjer, ovaj kod će deaktivirati sve račune u odjelu prodaje

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

Naravno, napišite filter za Get-ADUser prilično komplicirano, ali ovdje je upotreba parametra -Što ako zajedno s cmdletom Onemogući-ADAračun dolazi u pomoć.

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

Razmotrimo situaciju u kojoj je Jack zaključao svoj račun dok je pokušavao unijeti novu lozinku. Umjesto da pokušavate pronaći njegov račun putem GUI-ja, postupak otključavanja može se izvršiti pomoću jednostavne naredbe.

PS C:\> Otključaj-ADAAračun jfrost

Cmdlet također podržava parametre -Što ako I -Potvrdi.

Zadatak 4: Brisanje računa

Nije važno koliko korisnika uklonite - to je lako učiniti pomoću cmdleta Ukloni-ADUser. Ne želim ukloniti Jacka Frosta, ali da želim, upotrijebio bih kod poput ovog:

PS C:\> Remove-ADUser jfrost -whatif Što ako: Izvođenje operacije "Ukloni" na cilju "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

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)) | Ukloni-ADuser -što ako

Ova naredba će pronaći i izbrisati sve onemogućene OU račune zaposlenika koji nisu mijenjani 180 dana ili više.

Zadatak 5: Pronalaženje praznih grupa

Upravljanje grupama beskrajan je i nezahvalan zadatak. Postoji mnogo načina za pronalaženje praznih grupa. Neki izrazi mogu funkcionirati bolje od drugih, ovisno o vašoj organizaciji. Kod u nastavku pronaći će sve grupe u domeni, uključujući one ugrađene.

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

Ako imate grupe sa stotinama članova, korištenje ove naredbe može potrajati dugo; 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=Groups,OU=Employees,DC=Globomantics, DC=local" | Odaberite naziv, grupu*

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


Riža. 3. Pretraživanje i filtriranje univerzalnih grupa

Zadatak 6: Dodavanje korisnika u grupu

Dodajmo Jacka Frosta IT grupi u Chicagu:

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

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

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

Koristio sam cjevovodni izraz u zagradama kako bih pronašao sve korisnike koji imaju vlasništvo Grada u Chicagu. Kod u zagradama se izvršava i rezultirajući objekti prosljeđuju se parametru –Member. Svaki korisnički objekt dodaje se grupi Chicago Employees. Bez obzira radi li se o 5 ili 5000 korisnika, ažuriranje članstva u grupi traje samo nekoliko sekundi. Ovaj se izraz 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: Navedite članove grupe

Možda želite znati tko je u određenoj skupini. Na primjer, trebali biste povremeno saznati tko je član grupe administratora domene:

PS C:\> Get-ADGroupMember "Administratori domene"

Slika 4 prikazuje rezultat.


Riža. 4. Članovi grupe administratora domene

Cmdlet prikazuje AD objekt za svakog člana grupe. Što učiniti s ugniježđenim grupama? Moja grupa Chicago All Users zbirka je ugniježđenih grupa. Da bih dobio popis svih računa, samo moram upotrijebiti parametar -Ponavljajući.

PS C:\> Get-ADGroupMember "Chicago Svi korisnici" -Rekurzivno | Odaberite DistinguishedName

Ako želite ići drugim putem - pronaći u kojim se grupama korisnik nalazi - koristite svojstvo korisnika Član:

PS C:\> get-aduser jfrost -property Memberof | Odaberite -ExpandProperty memberOf CN=NewTest,OU=Groups,OU=Employees, DC=GLOBOMANTICS,DC=local CN=Chicago Test,OU=Groups,OU=Employees, DC=GLOBOMANTICS,DC=local CN=Chicago IT,OU= Grupe,OU=Zaposlenici, DC=GLOBOMANTICS,DC=lokalno CN=Prodajni korisnici u Chicagu,OU=Grupe,OU=Zaposlenici, DC=GLOBOMANTICS,DC=lokalno

Koristio sam parametar -Proširi svojstvo za prikaz imena Član poput linija.

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

Često mi postavljaju ovo pitanje: "Kako mogu pronaći zastarjele račune računala?" I uvijek odgovaram: “Što je za vas zastarjelo?” Kompanije imaju različite definicije kada se računalni račun (ili korisnički račun, nije važno) smatra zastarjelim i ne može se više koristiti. Što se mene tiče, obraćam pažnju na one račune čije lozinke nisu promijenjene određeno vrijeme. Ovo razdoblje za mene je 90 dana - ako računalo nije promijenilo lozinku zajedno s domenom tijekom tog razdoblja, najvjerojatnije je offline i zastarjelo. Cmdlet korišten Get-ADComputer:

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

Filtar radi odlično s tvrdom vrijednošću, ali ovaj će se kôd ažurirati za sve račune računala koji nisu promijenili svoje lozinke od 1. siječnja 2012. Rezultati su prikazani na slici 5.


Riža. 5. Pronađite zastarjele računalne račune

Druga opcija: pretpostavimo da ste barem na funkcionalnoj razini Windows domena 2003. Filtriraj po svojstvu LastLogontimeStamp. Ova vrijednost je broj intervala od 100 nanosekundi od 1. siječnja 1601. i pohranjena je u GMT-u, pa je rad s ovom vrijednošću malo nezgodan:

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


Riža. 6. Pretvorite vrijednost LastLogonTimeStamp u poznati format

Da bih stvorio filtar, moram pretvoriti datum, na primjer 1. siječnja 2012., u ispravan format. Konverzija se provodi u FileTime:

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

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

PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -or (lastlogontimestamp -notlike "*")" -property * | Odaberite Name,LastlogonTimestamp,PasswordLastSet

Gornji kod pronalazi ista računala koja su prikazana na slici 5.

Zadatak 9: Deaktivirajte račun računala

Možda ćete poželjeti deaktivirati ih kada pronađete neaktivne ili zastarjele račune. Ovo je vrlo lako učiniti. Koristit ćemo isti cmdlet koji smo koristili za rad s korisničkim računima. Možete to pojasniti pomoću samAccountname račun.

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

Ili pomoću izraza cjevovoda:

PS C:\> get-adcomputer "chi-srv01" | Onemogući-ADAračun

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

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Onemogući-ADAračun

Zadatak 10: Pronađite računala prema vrsti

Također me često pitaju kako pronaći račune računala prema vrsti, kao što su poslužitelji ili radne stanice. To zahtijeva malo kreativnosti s vaše strane. Ništa u AD-u ne razlikuje poslužitelj od klijenta, osim možda OS-a. Ako vaše računalo koristi Windows Server 2008, morat ćete napraviti nekoliko dodatnih koraka.
Najprije trebate dobiti popis operativnih sustava, a zatim filtriramo račune prema dostupnim operativnim sustavima.

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

Rezultati su prikazani na slici 7.


Riža. 7. Dohvaćanje popisa OS-a

Želim pronaći sva računala s operacijskim sustavom poslužitelja:

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

Rezultati su prikazani na slici 8.

Kao i kod drugih AD Get cmdleta, možete prilagoditi parametre pretraživanja i ograničiti zahtjev na određene OU-ove ako je potrebno. Svi izrazi koje sam pokazao mogu se integrirati u veće PowerShell izraze. Na primjer, možete sortirati, grupirati, primijeniti filtre, izvesti u CSV ili izraditi i poslati e-poštom HTML izvješća - sve iz PowerShell-a! U ovom slučaju nećete morati napisati niti jednu skriptu.
Evo bonusa: izvješće o dobi korisničke lozinke, spremljeno u HTML datoteku:

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

Iako ovaj izraz može izgledati pomalo zastrašujuće, jednostavan je za korištenje uz minimalno znanje o PowerShell-u. I ostaje još samo jedan posljednji savjet: kako definirati prilagođeno svojstvo tzv PasswordAge. Vrijednost predstavlja jaz između današnjeg dana i svojstva PasswordLastSet. Zatim sortiram rezultate za svoj novi posjed. Slika 9 prikazuje izlaz za moju malu testnu domenu.

Ažurirano:
Post sadrži prijevod članka na portalu

Koristi se za stvaranje, modificiranje i brisanje objekata imenika. Korisnik također može koristiti naredbu ldifde da biste proširili shemu, izvezli informacije o korisnicima i grupama Active Directory u druge aplikacije ili usluge i popunili uslugu ADAM (Aplikacijski način rada Active Directory) podacima iz drugih imeničkih usluga.

Sintaksa

ldifde [-i] [-f naziv datoteke] [-s naziv_poslužitelja] [-c linija1 linija2] [-v] [-j staza] [-t port_broj] [-d DN_baza] [-r filter_LDAP] [-str regija] [-l LDAP_popis_atributa] [-o LDAP_popis_atributa] [-g] [-m] [-n] [-k] [-a ] [-b ] [-? ]

Mogućnosti

-i Određuje način uvoza. Ako parametar nije definiran, način izvoza koristi se prema zadanim postavkama. -fnaziv datoteke Određuje naziv datoteke za uvoz ili izvoz. -snaziv_poslužitelja Određuje računalo na kojem bi se trebala izvesti operacija uvoza ili izvoza. Zadani program ldifde izvršit će se na računalu na kojem ldifde instaliran. -clinija1 linija2 Zamjenjuje sve pojave linije1 sadržaj linije2. Obično se koristi kada uvozite podatke iz jedne domene u drugu i morate zamijeniti razlikovni naziv domene koja vrši izvoz ( linija 1), uvoz naziva domene ( linija2). -v Omogućuje način rada detaljna evidencija. -jstaza Određuje mjesto datoteke dnevnika. Zadano je trenutni put. -tport_broj Određuje broj porta Lightweight Directory Access Protocol (LDAP). Zadani LDAP port je 389. Port globalnog kataloga je 3268. -dDN_baza Određuje razlikovno ime baze pretraživanja za izvoz podataka. -rLDAP filter Stvara LDAP filtar pretraživanja za izvoz podataka. Na primjer, sljedeći filtar izvozi sve korisnike s određenim srednjim imenom: csvde -r (and(objectClass=Korisnik)(sn=Prezime)) -strregija Određuje područje pretraživanja. Parametri opsega pretraživanja su Baza, OneLevel I Podstablo. -lLDAP_popis_atributa Određuje popis atributa koji se vraća u rezultatima zahtjeva za izvoz. Ako je ovaj parametar izostavljen, vraćaju se svi atributi. -oLDAP_popis_atributa Određuje popis atributa koji se izostavljaju iz rezultata zahtjeva za izvoz. Ova se opcija obično koristi kada izvozite objekte iz aktivnog imenika i zatim ih uvozite u drugi direktorij kompatibilan s LDAP-om. Ako neki atributi nisu podržani od strane drugog imenika, mogu se isključiti iz skupa rezultata pomoću ovaj parametar. -g Uklanja pretraživanje stranica. -m Izostavlja atribute koji se ne mogu napisati, kao npr ObjectGUID I objectSID. -n Izostavlja izvoz binarnih vrijednosti. -k Zanemaruje pogreške tijekom operacije uvoza i nastavlja obradu. Slijedi potpuni popis zanemarenih pogrešaka:

  • objekt je već član grupe;
  • kršenje klase objekta (što znači da navedena klasa objekta ne postoji) ako uvezeni objekt nema drugih atributa;
  • objekt već postoji;
  • kršenje ograničenja;
  • atribut ili vrijednost već postoji;
  • takav objekt ne postoji.
-arazlikovno_ime_lozinka Određuje izvršenje naredbe pomoću navedenog razlikovno_ime_korisničko_ime I lozinka -b. -bkorisničko ime lozinka domene Određuje naredbu koja će se izvršiti pomoću navedenog korisničko ime, domena i lozinka. Prema zadanim postavkama, naredba će se izvršiti korištenjem vjerodajnica korisnika koji je trenutno prijavljen na mrežu. Ne može se koristiti s parametrom -a. -? Prikazuje izbornik naredbi.

Bilješke

  • S parametrom -c možete koristiti konstante #schemaNamingContext I #configurationNamingContext umjesto razlikovnih imena particije direktorija sheme i particije direktorija konfiguracije.
  • Prilikom izrade datoteke za uvoz za naredbu ldifde, koristite vrijednost changeType za određivanje vrste promjena sadržanih u datoteci za uvoz. Vrijednosti changeType dati su u tablici u nastavku.

Ispod je primjer LDAP uvozne datoteke u LDIF formatu koja koristi vrijednost dodati:
DN: CN=odabrani_korisnik,DC=naziv domene
vrsta promjene: dodati
CN: odabrani_korisnik
opis:opis_datoteke
objektna klasa: korisnik
objektna klasa: odabrani_korisnik

Primjeri

Da biste izdvojili samo razlikovno ime, uobičajeno ime, ime, prezime i telefonski broj vraćenih objekata, unesite:
-l istaknuto_ime, CN, Ime, S N. telefon
Da biste isključili globalni jedinstveni identifikator (GUID) za objekt, unesite:
-o kada_stvoren, kada_promijenjeno, objekt_GUID

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

Ivan Piskunov

Jedan od standardnih revizijskih postupaka ITGC za katalog Aktivni direktorij je dobiti preuzimanje svih korisnika domene. Na temelju dobivenih podataka zatim se formiraju procedure testiranja, na primjer, proučavanje popisa administratora ili identificiranje korisnika s isteklom lozinkom. Najučinkovitiji način za stvaranje takvog prijenosa bila bi upotreba standardno sučelje PowerShell , primjere kojih ćemo razmotriti u ovom članku

1. Ekspresni prijenos pomoću skripte PowerShell

U nastavku se nalazi PowerShell skripta kao jedan od najjednostavnijih i najbržih načina da dobijete popis svih korisnika AD domene u CSV formatu koji se bez problema otvara u Excelu.

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=osoba) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Broj računa $users.Count $users | ForEach-Object ( $user = $_.Properties New-Object PsObject -Property @( Position = $user.description Department = $user.department Login = $user.userprincipalname Phone = $user.telephonenumber Room = $user.physicaldeliveryofficename Full ime = $user.cn ) ) | Export-Csv -NoClobber -Encoding utf8 -Path C: popis_korisnika_domena.csv

Kako bi skripta radila na vašem sustavu potrebno ju je malo korigirati, odnosno unijeti potrebne parametre, tj. kako u u ovom primjeru ovo su parametri Korisnici u odjelu Odjeli u domeni Test.ru. Također navedite put do mjesta na kojem je datoteka spremljena popis_korisnika_domena.csv

Nakon istovara, ako ga odmah otvorite popis_korisnika_domena.csv , izgledat će nečitljivo, međutim, korištenjem standardnih sredstava možemo ga lako dovesti u format koji nam je potreban. Otvori u Excelu popis_korisnika_domena.csv , odaberite prvi stupac, zatim idite na karticu "Podaci" i kliknite "Tekst po stupcima". Odaberite "razgraničeno" i kliknite "Dalje". Spreman!

!Potrebno je napomenuti da ova skripta neće prikazati više od 1000 korisnika. Prilično je prikladno za malu tvrtku, ali za one s domenom veliki iznos korisnici bi trebali pribjeći dolje opisanim metodama.

2. Napredni PowerShell cmdlet za primanje prijenosa Aktivni korisnici Imenik

Alat Active Directory Module za Windows PowerShell (uveden u Windows Server 2008 R2 i noviji) omogućuje stvaranje cmdleta koji izvode različite manipulacije objektima AD imenika. Cmdlet se koristi za dobivanje informacija o korisnicima i njihovim svojstvima Get-ADUser.

Početi pokrenite Powershell prozor s administratorskim pravima i uvezite modul Active Directory za daljnje radnje:
Import-Module activedirectory

Do popis svih računa domene i pokrenimo naredbu:

Get-ADUser -filter *

Do povući pun informacija o svim dostupnim atributima korisnik tuser, pokrenite naredbu

Get-ADUser -identity tuser -properties *


Na primjer, zanimaju nas informacije o datum promjene lozinke i vrijeme njenog isteka . Rezultat 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 učitaj u CSV , što će u budućnosti biti zgodno izvoziti u Excel (osim toga, koristeći sort-object sortirat ćemo tablicu po stupcu PasswordLastSet, a također dodati gdje stanje– korisničko ime mora sadržavati niz “Dmitry”)

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

0

Imam sljedeću radnu skriptu koja provjerava je li veliki popis korisnika u CSV datoteku kao član AD grupe i zapisuje rezultate u results.csv.

Nisam siguran kako pretvoriti skriptu da bih mogao promijeniti $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 AD grupu u novi CSV stupac (ili ako to nije moguće, stvaranje zasebne CSV datoteke za svaku grupu s rezultatima učinit će isto.

Mogao bih to učiniti ručno promjenom vrijednosti iz $group i naziva izvozne datoteke i ponovno pokretanje skriptu 80 puta, ali morao sam biti brz s PS-om da to učinim

na primjer 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 -Recursive | Odaberite -ExpandProperty SAMAccountName foreach ($user u $users) ( if ($members -sadrži $user) ( echo "$user $group`tYes" >> results.csv ) else ( echo "$user`tNo" >> rezultati .csv) )

  • 2 odgovora
  • Sortiranje:

    Aktivnost

0

trivijalno rješenje vašeg problema bilo bi zamotati vaš postojeći kod u drugoj petlji i kreirajte izlaznu datoteku za svaku grupu:

$groups = Get-Content "C:\groups.txt" foreach ($group in $groups) ( $members = Get-ADGroupMember ... ... )

Elegantniji pristup bio bi stvoriti predložak grupnog mapiranja, klonirati ga za svakog korisnika i popuniti kopiju članstvom u grupi korisnika. Nešto poput ovoga bi trebalo funkcionirati:

$template = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false) $groups = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap [$_] = $true ) New-Object -Type PSObject -Property $groupmap ) | Izvoz-Csv "C:\user_group_mapping.csv" -NoType

0

Igrao sam se s ovim neko vrijeme i mislim da sam pronašao način da dobiješ točno ono što tražiš.

Mislim da je Ansgar bio na dobrom putu, ali nisam ga mogao natjerati da učini ono što je uslijedilo. Spomenuo je da u vrijeme pisanja nije imao pristup AD okruženju.

Evo što 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 Korisnik=Članstvo u hash $UserHash.Add($_,$Memberships) ) #Vanjska petlja za stvaranje objekta po korisniku $Results = $UserArray | ForEach-Object( # Prvo kreirajte jednostavan objekt $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # Dinamički dodajte članove objektu, na temelju $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash da biste vidjeli prikazuje li se grupa na popisu članstva 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, 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 ako nemate instaliran RSAT na bilo kojem računalu na kojem ovo radite. Ako vam zatreba, javite mi i ja ću napraviti neke brze promjene.

Najbolji članci na temu