Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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) |