Megosztás a következőn keresztül:


Objektumok eltávolítása a folyamatból

A PowerShellben gyakran több objektumot hoz létre és ad át egy folyamatnak, mint amennyit szeretne. A parancsmagok használatával Format-* megadhatja az egyes objektumok tulajdonságait, de ez nem segít abban, hogy a teljes objektumokat eltávolítsa a kijelzőből. Előfordulhat, hogy a folyamat vége előtt szeretné szűrni az objektumokat, így csak az eredetileg létrehozott objektumok egy részhalmazán hajthat végre műveleteket.

A PowerShell tartalmaz egy Where-Object parancsmagot, amely lehetővé teszi a folyamat egyes objektumainak tesztelését, és csak akkor adja át a folyamat mentén, ha megfelel egy adott tesztelési feltételnek. A teszten nem átmenő objektumok törlődnek a folyamatból. A filterScript paraméter értékeként adja meg a tesztelési feltételt.

Egyszerű tesztek végrehajtása a Where-Object használatával

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

Feljegyzés

A PowerShell-összehasonlító operátorok alapértelmezés szerint nem érzéketlenek.

Elemzési szempontok miatt az olyan szimbólumok, mint a <,>, és = nem használhatók összehasonlító operátorként. Ehelyett az összehasonlító operátorok betűkből állnak. Az alapszintű összehasonlító operátorokat az alábbi táblázat sorolja fel.

Összehasonlító operátor Értelmezés Példa (igaz értéket ad vissza)
-Eq egyenlő 1 -eq 1
-ne nem egyenlő a 1 -ne 2
-Hadnagy Kisebb, mint 1 -lt 2
-Le Kisebb vagy egyenlő 1 -le 2
-Gt Nagyobb, mint 2 -gt 1
-Ge Nagyobb vagy egyenlő 2 -ge 1
-Mint Hasonló (helyettesítő karakterek összehasonlítása szöveghez) "file.doc" -like "f*.do?"
-nem tetszik nem tetszik (helyettesítő karakterek összehasonlítása a szöveghez) "file.doc" - nem hasonló "p*.doc"
-Tartalmaz Contains 1,2,3 – 1-et tartalmaz
-notcontains nem tartalmaz 1,2,3 -notcontains 4

Where-Object A szkriptblokkok a speciális változóval $_ hivatkoznak a folyamat aktuális objektumára. Íme egy példa a működésre. Ha rendelkezik számlistával, és csak a 3-nál kisebb számokat szeretné visszaadni, a számokat a következő beírással szűrheti Where-Object :

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

Szűrés objektumtulajdonságok alapján

Mivel $_ az aktuális folyamatobjektumra hivatkozik, hozzáférhetünk a tesztjeink tulajdonságaihoz.

Példaként a WMI Win32_SystemDriver osztályát tekinthetjük meg. Előfordulhat, hogy több száz rendszerillesztő van egy adott rendszeren, de előfordulhat, hogy csak a rendszerillesztők egy adott készlete érdekli, például a futó illesztőprogramok. Az Win32_SystemDriver osztály esetében a megfelelő tulajdonság az Állam. Szűrheti a rendszerillesztőket, és csak a futókat választhatja ki a következő beírással:

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

Ez továbbra is hosszú listát hoz létre. Érdemes lehet szűrni, hogy csak a StartMode érték tesztelésével válassza ki az automatikus indításra beállított illesztőprogramokat:

Get-CimInstance -Class Win32_SystemDriver |
    Where-Object {$_.State -eq "Running"} |
    Where-Object {$_.StartMode -eq "Auto"}
DisplayName : RAS Asynchronous Media Driver
Name        : AsyncMac
State       : Running
Status      : OK
Started     : True

DisplayName : Audio Stub Driver
Name        : audstub
State       : Running
Status      : OK
Started     : True
...

Ez sok információt ad nekünk, amelyekre már nincs szükségünk, mert tudjuk, hogy az illesztőprogramok futnak. Valójában jelenleg csak a névre és a megjelenítendő névre van szükségünk. 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 Driver
bindflt                Windows Bind Filter Driver
bowser                 Browser
CompositeBus           Composite Bus Enumerator Driver
condrv                 Console Driver
HdAudAddService        Microsoft 1.1 UAA Function Driver for High Definition Audio Service
HDAudBus               Microsoft UAA Bus Driver for High Definition Audio
HidUsb                 Microsoft HID Class Driver
HTTP                   HTTP Service
igfx                   igfx
IntcDAud               Intel(R) Display Audio
intelppm               Intel Processor Driver
...

A fenti parancs két Where-Object elemet tartalmaz, de egyetlen Where-Object elemben fejezhető ki a -and logikai operátorral, például a következővel:

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

A standard logikai operátorok az alábbi táblázatban találhatók.

Logikai operátor Értelmezés Példa (igaz értéket ad vissza)
-and Logikai és; igaz, ha mindkét oldal igaz (1 -eq 1) -and (2 -eq 2)
-or Logikai vagy; igaz, ha mindkét oldal igaz (1 -eq 1) -or (1 -eq 2)
-not Logikai nem; igaz és hamis -not (1 -eq 2)
! Logikai nem; igaz és hamis !(1 -eq 2)