PowerShell pentru începători (Partea 10): filtrare și unde-obiect

am învățat deja multe despre PowerShell. Ultima dată când am lucrat cu WMI: PowerShell pentru începători (Partea 9): obțineți totul de la Windows cu PowerShell și WMI acum, după părerea mea, este cel mai bun moment pentru a vă concentra pe subiectul „filtrarea cu PowerShell”. Dar mai întâi, să ne uităm la exercițiul din ultima parte.

toate părțile seriei pot fi găsite aici: PowerShell pentru începători (serie)

recenzie (Partea 9)

iată atribuirea și soluția din partea 9:

regăsiți informații despre hard disk. Utilizați Get-WmiObject sau Get-CimInstance. Mai întâi, căutați obiectul WMI și odată ce l-ați găsit, afișați numele, partițiile, Modelul, Firmware-ul și numărul de serie.

În primul rând, trebuie să aflăm numele instanței WMI. Deoarece sarcina se referă la hard disk, am putea căuta *disc*, de exemplu.

Get-WmiObject *disk* -List

Unbenannt.PNG

Win32_DiskDrive sună bine. Amintiți-vă metoda în doi pași din partea 8 pentru a obține mai mult din PowerShell:

Get-CimInstance win32_diskdrive | Get-Member

acolo veți găsi atributele corespunzătoare. Acum folosiți Select-Object pentru a le obține pe toate.

Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

Review

WMI (instrumente de gestionare Windows) oferă acces la citire și scriere la aproape toate setările Windows. Există două cmdleturi importante: Get-WmiObject și Get-CimInstance.

de ce filtrare?

filtrarea este o tehnologie cheie în PowerShell. Odată ce știți cum să filtrați, veți obține mai mult de la PowerShell.Ei bine, sarcina mea pentru această parte este de a explica de ce filtrarea este importantă. Ok să presupunem că aveți mai mult de un harddisk. Ieșirea de mai sus vă arată toate hard disk-urile. Dar doriți să afișați numai hard disk-uri Samsung, de exemplu.

Unbenannt.PNG

De ce ai vrea să faci asta? Poate că șeful tău te întreabă câte discuri Samsung sunt în uz. Pe toate computerele. Amintiți-vă, WMI și PowerShell vă permite să faceți interogări la distanță. OK înapoi la subiect. Vrem doar Samsung SSD cu 500 GB. Urmăriți parametrul filtrului!

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

următoarele este un pic ieșit din comun și pentru tocilari PowerShell mai avansate, dar de ce nu? Următoarea comandă primește toate SSD-urile Samsung de pe toate computerele de domeniu, dar nu de pe servere.

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

dacă colegii dvs. cred că vă confruntați cu o problemă de nerezolvat, apăsați butoanele și arătați-le ce puteți face. ok, să mergem la exemple pentru începători.

obiecte de filtrare

vă amintiți comanda Get-ChildItem? Am folosit această comandă foarte des în această serie.

Dacă executați Get-Help Get-ChildItem veți găsi o mulțime de exemple de filtrare în ajutor.

Get-Help Get-ChildItem -Online

prefer să folosesc ajutorul local.

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

ce am învățat până acum?

filtrarea este o tehnologie cheie în PowerShell. Odată ce ați înțeles cum să filtrați, veți obține mai mult de la PowerShell.

filtrarea obiectelor Active Directory

Dacă sunteți un IT-Pro, probabil că lucrați într-un mediu Active Directory. Filtrarea este o tehnică cheie atunci când lucrați cu obiecte Active Directory.

următoarea comandă utilizează parametrul filtru pentru a obține toți utilizatorii care sunt dezactivați:

Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name

Unbenannt.PNG

s-ar putea să vă întrebați cum știu numele atributelor? Amintiți-vă metoda în 2 pași pentru a obține mai mult din obiecte: 1. utilizați get-Membru 2. utilizați Select-obiect.

Unbenannt.PNG

parametrul filtrului

Să aruncăm o privire în jur. Ce comenzi utilizează parametrul filtru? Rețineți că sunt pe un controler de domeniu.

Get-Command -ParameterName Filter

după cum puteți vedea parametrul filtru este folosit mai ales în comenzile Active Directory. Și trebuie să recunosc că am folosit întotdeauna parametrul filtru numai pentru Active Directory. Așa stau lucrurile. Deci, să ne concentrăm pe Active Directory. Să spunem că vrem toate computerele de domeniu (sistem de Operare Server și sistem de operare Client) sortate după Sistem de operare. Pentru aceasta trebuie să folosim parametrul filtru cu *.

Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem

Unbenannt.PNG

în ceea ce privește filtrarea, aceasta a fost o sarcină simplă.

metoda de filtrare

acum încercăm să obținem toate computerele care au instalat Windows 10. Pentru aceasta, trebuie să punem parametrul filtrului în paranteze curbate.

Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}

este timpul să descompunem detaliile.

parantezele

pun filtrul în paranteze curbate.

Unbenannt.PNG

atributele

în continuare aflați numele proprietăților (atributelor). Am discutat deja în PowerShell pentru începători (Partea 8): puterea PowerShell – contactarea obiectelor (get-Member, Select-Object). Amintiți-vă metoda în doi pași!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt.PNG

notă laterală: notați parametrul proprietăți. În Active Directory nu toate proprietățile sunt afișate în mod implicit.

operatorii

apoi folosesc un operator.

Unbenannt.PNG

un operator ar putea fi-like, -as, -equal, -ne și așa mai departe … pentru mai multe detalii despre parametrii de tip

help about_operators

aceasta deschide un fișier text care este stocat pe computer.

enunțul

dacă vrem să filtrăm ceva, avem nevoie de o condiție. Această condiție trebuie plasată între ghilimele.

Unbenannt.PNG

Review

dacă lucrați cu filtre, consultați mai întâi secțiunea Ajutor. Filtrele sunt de obicei plasate între paranteze. Adesea este folosit și un operator.

mai multe exemple de filtrare … fără prea multe discuții …

căutarea utilizatorilor care au un număr de parole rău de 0. Iată un exemplu al contului lui Petra:

Unbenannt.PNG

Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name

Unbenannt.PNG

căutarea utilizatorilor care au un număr de parole rău de 0 și sunt activate. (Veți vedea că Petra nu este activată).

Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name

Unbenannt.PNG

Afișează toate computerele din domeniul Windows Server, dar numai cele care execută Windows Server 2016 și ale căror nume încep cu DC.

Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}

Unbenannt.PNG

dar uneori trebuie să găsim o altă cale. Anume atunci când nu este disponibilă nicio filtrare. Apoi folosim Where-Object.

filtrare cu Where-Object

Where-Object este întotdeauna în partea dreaptă a conductei. Filtrarea pe stânga. Ce înseamnă asta, argumentele pro și contra la sfârșitul postului. Pentru această parte, ne vom concentra pe unde-obiect.

iată câteva exemple din ajutorul PowerShell.

Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}

cu toate acestea, aș dori să folosesc un exemplu dintr-una dintre contribuțiile mele.

Get-Hotfix | Where-Object HotfixID -like KB31*

Unbenannt.PNG

acordați atenție remedierii rapide. Se referă la un atribut.

procedura recomandată (din cauza compatibilității înapoi) arată astfel:

Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}

Unbenannt.PNG

este ceva nou acum. Ce înseamnă$_?

$_ este o variabilă care iterează peste fiecare obiect / element trecut de la anterior (țeavă). Pur și simplu pune: ia remedierea rapidă de la fiecare obiect care vine de la conducta.

filtrare vs.Where-Object

dacă nu este disponibil niciun filtru, utilizați Where-Object. Dacă sunteți în stare să utilizați un filtru pe partea stângă a conductei folosi! De ce? Ei bine, este o diferență dacă trimiteți 1000 de obiecte peste țeavă sau doar 500, în cazul Where-Object toate obiectele trebuie să treacă prin țeavă și numai atunci sunt filtrate. Amintiți-vă conducta de la Partea 7: PowerShell pentru incepatori (Partea 7): conducta (și multe exemple pentru a juca cu)

Review

unde-obiect este întotdeauna pe partea dreaptă a conductei. Filtrarea pe stânga. Dacă aveți posibilitatea de a alege între un filtru pe partea stângă a conductei sau în cazul în care-obiect pe partea dreaptă, apoi alegeți partea stângă.

exercițiu

iată exercițiul până la următoarea parte.

Where-Object:

utilizați Get-Service și Where-Object pentru a afișa numai serviciile care rulează.

Filter (Active Directory required):

utilizați parametrul filtru pentru a obține toți utilizatorii care sunt dezactivați.

ne vedem data viitoare la subiect: PowerShell pentru începători (Partea 11): distracție cu unitățile PowerShell

Patrick Gruenauer, MVP PowerShell

Lasă un răspuns

Adresa ta de email nu va fi publicată.