• 12/23/2019
  • 4 minute de citit
    • j
    • s
    • m

În PowerShell, deseori generați și transmiteți la o conductă mai multe obiecte decât doriți. Puteți să specificați proprietățile anumitor obiecte care urmează să fie afișate utilizând cmdleturile Format-*, dar acest lucrunu vă ajută cu problema eliminării unor obiecte întregi din afișare. Este posibil să doriți să filtrați obiectele înainte de sfârșitul unui pipeline, astfel încât să puteți efectua acțiuni numai asupra unui subset de obiecte generate inițial.

PowerShell include un cmdlet Where-Object care vă permite să testați fiecare obiect din pipeline și să îl treceți de-a lungul pipeline-ului numai dacă îndeplinește o anumită condiție de testare. Obiectele care nu trec testul sunt eliminate din pipeline. Furnizați condiția de testare ca valoare a parametruluiFilterScript.

Realizarea de teste simple cu Where-Object

Valoarea lui FilterScript este un bloc de script – una sau mai multe comenzi PowerShell înconjurate de paranteze ({}) – care se evaluează la true sau false. Aceste blocuri de script pot fi foarte simple, darcrearea lor necesită cunoașterea unui alt concept PowerShell, operatorii de comparație. Un operator de comparare compară elementele care apar de fiecare parte a acestuia. Operatorii de comparare încep cu o cratimă (-) și sunt urmați de un nume. Operatorii de comparație de bază funcționează pe aproape orice tip de obiect. Operatorii de comparație mai avansați ar putea funcționa numai pe text sau matrici.

Nota

În mod implicit, atunci când se lucrează cu text, operatorii de comparație PowerShell nu țin cont de majuscule și minuscule.

Din considerente legate de parsare, simboluri precum <,> și = nu sunt utilizate ca operatori de comparație. În schimb, operatorii de comparație sunt compuși din litere. Operatorii de comparație de bază sunt enumerați în tabelul următor.

este egal cu 1 -eq 1

1 -ne 2

Este mai mic decât 1 -lt 2

-le Este mai mic sau egal cu 1 -le 2 -gt Este mai mare decât 2 – -.gt 1 -ge Este mai mare sau egal cu 2 -ge 1 -like Este asemănător (comparație cu wildcard pentru text) „file.doc” -asemănător cu „f*.do?” -conține Conține 1,2,3 -conține 1 -nu-conține Nu conține 1,2,3 -nu conține 4
Operator de comparație Semnificație Exemplu (returnează adevărat)
-eq
-ne Nu este egal cu
-lt
-nu este asemănător Nu este asemănător cu (comparație cu wildcard pentru text) „file.doc” -nu este asemănător cu „p*.doc”

Where-Object blocurile de script utilizează variabila specială $_ pentru a se referi la obiectul curent din linie. Iată un exemplu de funcționare. Dacă aveți o listă de numere și doriți să le returnați doar pe cele care sunt mai mici de 3, puteți folosi Where-Object pentru a filtra numerele tastând:

1,2,3,4 | Where-Object {$_ -lt 3}12

Filtrare pe baza proprietăților obiectului

Din moment ce $_ se referă la obiectul curent al pipeline-ului, putem accesa proprietățile acestuia pentru testele noastre.

Ca exemplu, putem examina clasa Win32_SystemDriver din WMI. S-ar putea să existe sute de driver de sistem pe un anumit sistem, dar s-ar putea să fiți interesat doar de un anumit set de driver de sistem, cum ar fi cele care rulează în prezent. Pentru clasa Win32_SystemDriver, proprietatea relevantă este State. Puteți filtra driverele de sistem, selectându-le numai pe cele care rulează, tastând:

Get-CimInstance -Class Win32_SystemDriver | Where-Object {$_.State -eq 'Running'}

Aceasta produce totuși o listă lungă. Este posibil să doriți să filtrați pentru a selecta numai driverele setate să pornească automat, testând și valoarea StartMode:

Get-CimInstance -Class Win32_SystemDriver | Where-Object {$_.State -eq "Running"} | Where-Object {$_.StartMode -eq "Auto"}
DisplayName : RAS Asynchronous Media DriverName : AsyncMacState : RunningStatus : OKStarted : TrueDisplayName : Audio Stub DriverName : audstubState : RunningStatus : OKStarted : True...

Acest lucru ne oferă o mulțime de informații de care nu mai avem nevoie, deoarece știm că driverele rulează.De fapt, singurele informații de care avem probabil nevoie în acest moment sunt numele și numele de afișare. Următoarea comandă include doar aceste două proprietăți, rezultând o ieșire mult mai simplă:

Get-CimInstance -Class Win32_SystemDriver | Where-Object {$_.State -eq "Running"} | Where-Object {$_.StartMode -eq "Manual"} | Format-Table -Property Name,DisplayName
Name DisplayName---- -----------AsyncMac RAS Asynchronous Media Driverbindflt Windows Bind Filter Driverbowser BrowserCompositeBus Composite Bus Enumerator Drivercondrv Console DriverHdAudAddService Microsoft 1.1 UAA Function Driver for High Definition Audio ServiceHDAudBus Microsoft UAA Bus Driver for High Definition AudioHidUsb Microsoft HID Class DriverHTTP HTTP Serviceigfx igfxIntcDAud Intel(R) Display Audiointelppm Intel Processor Driver...

Există două elemente Where-Object în comanda de mai sus, dar ele pot fi exprimate într-un singur elementWhere-Object prin utilizarea operatorului logic -and, astfel:

Get-CimInstance -Class Win32_SystemDriver | Where-Object {($_.State -eq 'Running') -and ($_.StartMode -eq 'Manual')} | Format-Table -Property Name,DisplayName

Operatorii logici standard sunt enumerați în tabelul următor.

Operator logic și; true dacă ambele părți sunt adevărate (1 -eq 1) -și (2 -eq 2)

-or Logic or; true dacă oricare dintre părți este adevărată (1 -eq 1) -or (1 -eq 2)

Logic not; inversează true și false

Nu logic; inversează adevărat și fals !(1 -eq 2)

Operator logic Semnificație Exemplu (returnează true)
și
-not -not (1 -eq 2)
!

admin

Lasă un răspuns

Adresa ta de email nu va fi publicată.

lg