• 12/23/2019
  • 4 minutes to read
    • j
    • s
    • m

In PowerShell, gyakran több objektumot generál és ad át egy csővezetéknek, mint amennyit szeretne. A Format-* cmdletekkel meghatározhatja a megjelenítendő egyes objektumok tulajdonságait, de ez nem segít azon a problémán, hogy teljes objektumokat távolítson el a megjelenítésből. Előfordulhat, hogy a csővezeték vége előtt szűrni szeretné az objektumokat, hogy a kezdetben generált objektumoknak csak egy részhalmazán hajthasson végre műveleteket.

A PowerShell tartalmaz egy Where-Object cmdletet, amely lehetővé teszi, hogy minden egyes objektumot teszteljen a csővezetékben, és csak akkor adja tovább a csővezetéken, ha megfelel egy adott tesztfeltételnek. Azokat az objektumokat, amelyek nem felelnek meg a tesztnek, a rendszer eltávolítja a csővezetékből. A tesztfeltételt aFilterScript paraméter értékeként adja meg.

Egyszerű tesztek végrehajtása a Where-Objektummal

A FilterScript értéke egy szkriptblokk – egy vagy több, zárójelekkel ({}) körülvett PowerShell-parancs -, amely igaz vagy hamis értéket ad. Ezek a szkriptblokkok nagyon egyszerűek lehetnek, de létrehozásukhoz ismerni kell egy másik PowerShell fogalmat, az összehasonlító operátorokat. Az összehasonlítóoperátor összehasonlítja a két oldalán megjelenő elemeket. Az összehasonlító operátorok kötőjellel kezdődnek (-), és egy név követi őket. Az alapvető összehasonlító operátorok szinte bármilyen típusú objektummal működnek. A fejlettebb összehasonlító operátorok csak szövegre vagy tömbökre működhetnek.

Figyelem

A szöveggel való munka során a PowerShell összehasonlító operátorok alapértelmezés szerint nem érzékenyek a nagy- és kisbetűkre.

Az olyan szimbólumok, mint a <,> és a =, elemzési megfontolások miatt nem használhatók összehasonlítóoperátorként. Ehelyett az összehasonlító operátorok betűkből állnak. Az alapvető összehasonlító operátorokat a következő táblázat tartalmazza.

Összehasonlító operátor Megjelölés Példa (igazat ad vissza)
-eq egyenlő 1 -vel.eq 1
-ne nem egyenlő 1 -ne 2
-lt kevesebb mint 1 – -lt 2
-le Kisebb vagy egyenlő 1 -le 2
-gt Több mint 2 – -gt 1
-ge Nagyobb vagy egyenlő 2 -ge 1
-like Is like (wildcard comparison for text) “file.doc” -like “f*.do?”
-notlike nem olyan, mint (wildcard összehasonlítás szövegre) “file.doc” -notlike “p*.doc”
-tartalmazza Tartalmazza 1,2,3 -tartalmazza 1
-nemtartalmazza Nem tartalmazza 1,2,3 -notcontains 4

Where-Object A szkriptblokkok a $_ speciális változót használják az aktuális objektumra való hivatkozáshoz a pipeline-ban. Íme egy példa a működésre. Ha van egy számok listája, és csak azokat szeretné visszaadni, amelyek 3-nál kisebbek, akkor a Where-Object segítségével szűrheti a számokat a következő beírással:

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

Szűrés az objektum tulajdonságai alapján

Mivel a $_ a csővezeték aktuális objektumára utal, tesztjeinkhez hozzáférhetünk annak tulajdonságaihoz.

Példaként a WMI Win32_SystemDriver osztályát tekinthetjük meg. Lehet, hogy egy adott rendszeren több száz rendszerillesztőprogram van, de lehet, hogy csak a rendszerillesztőprogramok egy bizonyos csoportja érdekli, például azok, amelyek éppen futnak. A Win32_SystemDriver osztály releváns tulajdonsága a State. Szűrhetjük a rendszerillesztőprogramokat, és csak a futókat választhatjuk ki:

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

Ez még mindig egy hosszú listát eredményez. Érdemes lehet úgy szűrni, hogy csak az automatikus indításra beállított illesztőprogramokat válassza ki a StartMode érték vizsgálatával is:

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

Ezzel sok olyan információt kapunk, amelyre már nincs szükségünk, mivel tudjuk, hogy az illesztőprogramok futnak.Valójában az egyetlen információ, amelyre valószínűleg ezen a ponton szükségünk van, a név és a megjelenítési név. A következő parancs csak ezt a két tulajdonságot tartalmazza, ami sokkal egyszerűbb kimenetet eredményez:

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

A fenti parancsban két Where-Object elem van, de a -and logikai operátor használatával egyetlenWhere-Object elemben is kifejezhetők, így:

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

A szabványos logikai operátorokat a következő táblázat tartalmazza.

Logikai operátor Megjelölés Példa (igazat ad vissza)
-and Logikai és; igaz, ha mindkét oldal igaz (1 -eq 1) -és (2 -eq 2)
-or Logikai vagy; igaz, ha bármelyik oldal igaz (1 -eq 1) -vagy (1 -eq 2)
-nem Logikai nem; megfordítva igaz és hamis -nem (1 -eq 2)
! Logikai nem; megfordítja az igazat és a hamisat !(1 -eq 2)

admin

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

lg