Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Željezo
  • Skripte za istovar svih korisnika iz MS Active Directory (ITGC). PowerShell skripta za uvoz u šumu Active Directory i stvaranje datoteke s korisnicima

Skripte za istovar svih korisnika iz MS Active Directory (ITGC). PowerShell skripta za uvoz u šumu Active Directory i stvaranje datoteke s korisnicima

Danas ćemo pokušati preuzeti popis svih korisnika u zasebnu datoteku iz Active Directory. 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. Danas počevši od verzije Windows poslužitelj 2008 R2, možemo raditi s AD-om preko PowerShella. S pojavom PowerShell 2.0, koristi se za interakciju s Active Directoryjem poseban modul 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 na kojem operativnom sustavu ćemo pokretati PowerShell konzolu, morat ćemo izvršiti “pripremne korake”.

1) Ako radimo pod Windows Serverom 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 Modul 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 uđem u prozor PowerShell popis sve korisnike sa svim svojstvima, trebate 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 određenog korisnika pod imenom user1:

  • 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:

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

Ivan Piskunov

Jedan od standardne procedure provođenje revizije 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 ispraviti, odnosno unijeti traženi parametri, 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 koji imaju ogroman broj korisnika u svojoj domeni, trebali bi 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

Nastavljamo se upoznavati s korisnim PowerShell cmdletima za rad s Active Directoryjem. U prošlom članku o kojem smo govorili, koji vam omogućuje dobivanje bilo kakvih informacija o AD korisničkim računima. Danas pričati ćemo o cmdlet-u Dobiti-ADRačunalo te njegovo korištenje za dobivanje raznih podataka o računima računala (poslužitelja i radnih stanica) u Aktivna domena Imenik.

Postavimo ga za sebe praktični problem: Koristeći PowerShell, morate dobiti popis računalnih računa koji nisu registrirani u domeni više od 120 dana (neaktivna računala) i onemogućiti ih.

Prije nego što možete koristiti cmdlet Get-ADComputer, morate omogućiti modul AktivanImenikModulzaWindowsPowerShell.

Import-Module activedirectory

Savjet. U PowerShell 3.0 (uvedenom u Windows Server 2012) i novijim, ovaj je modul uključen prema zadanim postavkama prilikom instaliranja komponente Udaljeni poslužitelj Alati za administraciju -> Alati za administraciju uloga -> Alati AD DS i AD LDS -> Modul Active Directory za Windows PowerShell. Da biste koristili cmdlet Get-ADComputer u Windows 10.8.1 i Windows 7 klijentima, trebate preuzeti i instalirati za svoju verziju OS-a i omogućiti AD-Powershell modul s upravljačke ploče ili pomoću naredbe:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Razmatranja sintakse cmdleta Get-ADComputer

Pomoć o parametrima cmdleta Get-ADComputer poziva se standardno pomoću Get-Help:

Za dobivanje informacija iz AD-a pomoću cmdleta AD za Powershell modul nije potrebno imati administratorska prava domene, dovoljno je da je račun pod kojim se pokreće cmdlet uključen u grupu korisnika domene (Authenticated Users / Domain Users).

Da biste dobili informacije o određenom računalu u domeni, navedite njegovo ime s parametrom - Identitet:

Get-ADComputer -Identity SRV-DB01

Zanima nas vrijeme zadnje registracije računala u AD domeni, ali te informacije nema u izlazu naredbe. Prikažimo sva dostupna svojstva računala u Active Directory:

Get-ADComputer -Identity SRV-DB01 -Svojstva *

Kao što vidite, vrijeme zadnja prijava ovog računala na mrežu naznačeno je u atributu LastLogonDate – 21.09.2015 0:20:17.

Sve ćemo ukloniti nepotrebne informacije, ostavljajući samo vrijednosti polja Ime I LastLogonDate.

Get-ADComputer -identity SRV-DB01 -Svojstva * | FT ime, datum zadnje prijave -automatska veličina

Zatim morate ispraviti naredbu tako da prikazuje informacije o vremenu zadnje registracije na mreži za sva računala u domeni. Da biste to učinili, zamijenite parametar Identitet na filtar:

Get-ADComputer -Filter * -Svojstva * | FT ime, datum zadnje prijave -automatska veličina

Za prikaz informacija o računalima u određenom spremniku domene (OU), upotrijebite parametar SearchBase:
Get-ADComputer -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -Filter * -Svojstva * | FT ime, datum zadnje prijave -automatska veličina

Razvrstajmo rezultate upita prema vremenu zadnje prijave na mrežu (polje LastLogonDate) pomoću naredbe Vrsta:

Get-ADComputer -Filter * -Svojstva * | Poredaj datum zadnje prijave | FT ime, datum zadnje prijave -automatska veličina

Dakle, primili smo popis domenskih računala i vrijeme kada su se zadnji put prijavila na mrežu Active Directory, sada želimo blokirati Računi računala koja nisu korištena dulje od 120 dana.

Koristeći Get-Date ulazimo varijabilna vrijednost trenutni datum i oduzmite 120 dana od trenutnog datuma:

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

Rezultirajuća varijabla datuma može se koristiti kao filtar za zahtjev Get-ADComputer pomoću polja LastLogonDate

Get-ADComputer -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | Poredaj datum zadnje prijave | FT ime, datum zadnje prijave -automatska veličina

Dakle, dobili smo popis neaktivna računala koji se nisu online registrirali dulje od 120 dana. Pomoću naredbe Onemogući-ADAračun Ugasimo ih.

Savjet. Prvi put je bolje testirati rezultate naredbe pomoću prekidača Što ako, koji osigurava da naredba ne čini nikakve promjene, pokazujući što će se dogoditi kada se izvrši.

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

Sada možete blokirati sve primljene račune računala:

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

Get-ADComputer: praktični primjeri korištenja

Ispod su još neki korisni primjeri naredbi koje koriste cmdlet Get-ADComputer.

Dohvatite broj računala u Active Directory:

Get-ADComputer -Filter (SamAccountName -kao "*") | Mjera-Objekt

Popis računala čija imena počinju s BuhPC:

Get-ADComputer -Filter "Ime -kao "BuhPC*"" -Svojstva IPv4Address | Ime tablice formata, Ime DNS-a, IPv4Address -A

Odaberite sve radne stanice sa sustavom Windows XP:

Get-ADComputer -Filter (OperatingSystem -kao "*XP*")

Odaberite samo poslužiteljske sustave:

Get-ADComputer -Filter ( OperatingSystem -Like "*Windows Server*" ) -Properties OperatingSystem | Odaberite Naziv, Operativni sustav | Format-Table – AutoSize

Dohvatite popis poslužitelja u domeni s instaliranom verzijom OS-a i servisnim paketom:
Get-ADComputer -Filter (OperatingSystem -Like "*Windows Server*" ) -Property * | Format-Table Name,OperatingSystem,OperatingSystemServicePack -Wrap -Auto

Za brisanje svih računalnih računa u domeni koji nisu bili dio domene više od 6 mjeseci, možete koristiti naredbu:

get-adcomputer -properties lastLogonDate -filter * | gdje ( $_.lastLogonDate -lt (get-date).addmonths(-6) ) | Ukloni-ADComputer

Odaberite isključena računala u određenoj OU:

Get-ADComputer -filter * -SearchBase "OU=Računala, dc=winitpro,dc=loc" | Where-Object ($_.enabled -eq $False)

Rezultati naredbe mogu se izvesti u tekstualnu datoteku:

Get-ADComputer -Filter ( OperatingSystem -Like "*Windows Server*" ) -Properties OperatingSystem | Odaberite Naziv, Operativni sustav | Format-Table -AutoSize C:\Script\server_system.txt

Ili CSV datoteka:

Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem,OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8

Da biste izvršili određenu radnju sa svim računalima s rezultirajućeg popisa, morate koristiti Foreach petlja. U ovom primjeru želimo generirati popis poslužitelja u domeni (popis bi trebao sadržavati naziv poslužitelja, proizvođača i model poslužitelja).

$Computers = Get-ADComputer -Filter (OperatingSystem -Like "*Windows Server*")
Foreach ($Computer u $Computers)
{
$Hostname = $Computer.Name
$ComputerInfo = (Get-WmiObject -Naziv računala$Hostname Win32_ComputerSystem)
$Manufacturer = $Computer.Manufacturer
$Model = $Computer.Model
Write-Host "Ime: $Hostname"
Write-Host "Manufacturer: $Manufacturer"
Write-Host "Model: $Model"
Write-Host " "
$Content = "$Hostname;$Manufacturer;$Model"
Dodavanje sadržaja -Vrijednost$Sadržaj -Staza"C:\PS\ServersInfo.txt"
}

Alternativno, možete koristiti kraću sintaksu petlje. Recimo da trebamo učiniti određena naredba na svim računalima u određenoj OU (u ovom primjeru želimo pokrenuti naredbu za ažuriranje pravila grupe na svim poslužiteljima):

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

Kao što znate, jedan od načina masovnog uvoza korisnika je uvoz korisnika iz Active Directoryja. Međutim, ova opcija uvoza podliježe određenim ograničenjima:

  1. Nemoguće je ponovno uvesti podatke za postojeće korisnike u sustavu.
  2. Nije moguće pokrenuti komponentu uvoza putem naredbenog retka u samostalnom načinu rada.
  3. Nije moguće uvesti dodatne podatke o računu iz aktivnog imenika (učitavaju se samo podaci potrebni za generiranje korisnika).

Prilikom sljedeće implementacije sustava, naručitelj je postavio stroge zahtjeve za uvoz korisnika iz kataloga:

  1. Trebalo bi biti moguće opetovano uvoziti podatke o postojećim korisnicima kako bi se ažurirale informacije o tim korisnicima (onemogućavanje računa, učitavanje certifikata, korisničke grupe itd.)
  2. Uvoz korisničkih grupa s tipovima Organizacijske jedinice i Univerzalne grupe, uzimajući u obzir hijerarhiju u Active Directoryju. Ažuriranje podataka o članstvu korisnika u određenoj grupi.
  3. Uvoz korisničkih certifikata.
  4. Automatski povežite korisnički račun s postojeći unos imenik Radnici.
  5. Uvoz Email adrese korisnika (kasnije se koristi za slanje obavijesti o novim zadacima).
  6. Zatvaranje korisničkog računa sustava DIRECTUM ako je onemogućen u aktivnom imeniku.
  7. Radite izvan mreže putem naredbenog retka na dodijeljenim zadacima.

Kao rezultat rada razvijeno je rješenje u obliku scenarija koji zadovoljava ove zahtjeve. Glavna funkcionalnost skripte uključuje sljedeće:

  • Uvezite korisnički račun. Korisničko ime i puno ime su uvezeni.
  • Uvoz grupa korisnika. Uvoze se korisničke grupe kojima pripada imenički račun (uvoze se grupe tipa Organizacijska jedinica i Univerzalne grupe). Ovo uzima u obzir hijerarhiju imenika domene.
  • Uvoz korisničkih certifikata. Uvozi važeće certifikate računa imenika i certifikate koji nisu istekli za potrebe potpisivanja i šifriranja.
  • Brisanje/zatvaranje računa. Brisanje korisničke prijave i zatvaranje unosa u imeniku Korisnici kada je račun imenika onemogućen.
  • Povezivanje računa sa zaposlenikom. Korisnički račun povezan je s unosom u imeniku radnici, za koju vrijednost atributa odgovara Prezime I.O. s potpuno kvalificiranim imenom računa imenika.
  • Adresa uvozaE-pošta. Ako je račun uvezenog korisnika bio povezan sa zapisom radnici, zatim za odgovarajući unos u imeniku Osobe E-mail adresa korisnika se bilježi.

Skripta vam omogućuje rad u vizualnom načinu (kada trebate obraditi jedan ili više računa) iu skrivenom načinu (kada obrađujete sve račune bez sudjelovanja administratora).

Pa, radi jasnoće, dat ću primjer vizualni rad skripta.

Dakle, nakon pokretanja skripte, postavite parametre uvoza i kliknite u redu :

Na sljedeći korak odaberite uvezene korisničke korisnike. Premjestite potrebne korisnike iz lijevog stupca u desni i kliknite gumb u redu :

Nakon što su korisnici uvezeni, vidimo poruku o kraju skripte:

Možemo vidjeti koje su radnje izvedene s računima u dnevniku uvoza.

Razvojna platforma: IZRAVNO 4.6.1.
Razvojno tehnički paket opis:
Ispravljena funkcija skripte:

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”.

Aktivna kontrola Imenik (AD) sa koristeći Windows PowerShell je lakši 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 Alati za udaljenu administraciju poslužitelja 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 sigurni 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 samAccountname– najbolja 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: Resetiranje korisničke lozinke pomoću PowerShell-a 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). Ali koristeći PowerShell 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 razdoblje 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 domene Windows 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 sve što ostaje jest 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

Najbolji članci na temu