İşlem hattından nesneleri kaldırma

PowerShell'de genellikle bir işlem hattına istediğinizden daha fazla nesne oluşturur ve geçirirsiniz. Cmdlet'leri kullanarak Format-* görüntülenecek belirli nesnelerin özelliklerini belirtebilirsiniz, ancak bu, nesnelerin tamamını ekrandan kaldırma sorununa yardımcı olmaz. bir işlem hattının sonundan önce nesneleri filtrelemek isteyebilirsiniz, böylece ilk oluşturulan nesnelerin yalnızca bir alt kümesinde eylemler gerçekleştirebilirsiniz.

PowerShell, işlem hattındaki her nesneyi test etmenizi ve yalnızca belirli bir Where-Object test koşulunu karşılıyorsa işlem hattı boyunca geçirmenizi sağlayan bir cmdlet içerir. Testi geçmeyen nesneler işlem hattından kaldırılır. Test koşulunu FilterScript parametresinin değeri olarak sağlarsınız.

Where-Object ile basit testler gerçekleştirme

FilterScript değeri, true veya false olarak değerlendirilen, küme ayraçları ({}) ile çevrelenmiş bir veya daha fazla PowerShell komutu olan bir betik bloğudur. Bu betik blokları basit olabilir, ancak bunları oluşturmak için başka bir PowerShell kavramı olan karşılaştırma işleçleri hakkında bilgi edinmeniz gerekir. Karşılaştırma işleci, her tarafında görünen öğeleri karşılaştırır. Karşılaştırma işleçleri kısa çizgi karakteriyle (-) başlar ve ardından bir ad eklenir. Temel karşılaştırma işleçleri neredeyse her tür nesne üzerinde çalışır. Daha gelişmiş karşılaştırma işleçleri yalnızca metin veya diziler üzerinde çalışabilir.

Not

Varsayılan olarak, PowerShell karşılaştırma işleçleri büyük/küçük harfe duyarlı değildir.

Ayrıştırma konusunda dikkat edilmesi gerekenler nedeniyle, = ve gibi <>simgeler karşılaştırma işleçleri olarak kullanılmaz. Bunun yerine, karşılaştırma işleçleri harflerden oluşur. Temel karşılaştırma işleçleri aşağıdaki tabloda listelenmiştir.

Karşılaştırma İşleci Anlamı Örnek (true döndürür)
-Eq şuna eşittir: 1 -eq 1
-ne eşit değil 1 -ne 2
-Teğmen Küçüktür 1 -lt 2
-Le Küçüktür veya eşittir 1 -le 2
-Gt Büyüktür 2 -gt 1
-Ge Büyüktür veya eşittir 2 -ge 1
-Gibi Gibi (metin için joker karakter karşılaştırması) "file.doc" -like "f*.do?"
-notlike gibi değil (metin için joker karakter karşılaştırması) "file.doc" -notlike "p*.doc"
-Içerir Contains 1,2,3 -contains 1
-notcontains içermez 1,2,3 -notcontains 4

Where-Object betik blokları, işlem hattındaki geçerli nesneye başvurmak için özel değişkeni $_ kullanır. Nasıl çalıştığını gösteren bir örnek aşağıda verilmiştir. Bir sayı listeniz varsa ve yalnızca 3'ten küçük olanları döndürmek istiyorsanız, şunu yazarak sayıları filtrelemek için kullanabilirsiniz Where-Object :

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

Nesne özelliklerine göre filtreleme

Geçerli işlem hattı nesnesine başvurduğundan $_ , testlerimizin özelliklerine erişebiliriz.

Örnek olarak WMI'deki Win32_SystemDriver sınıfına bakabiliriz. Belirli bir sistemde yüzlerce sistem sürücüsü olabilir, ancak çalışan sürücüler gibi yalnızca belirli bir sistem sürücüsü kümesiyle ilgileniyor olabilirsiniz. Win32_SystemDriver sınıfı için ilgili özellik State'tir. Şunu yazarak yalnızca çalışan sürücüleri seçerek sistem sürücülerini filtreleyebilirsiniz:

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

Bu, hala uzun bir liste oluşturur. StartMode değerini de test ederek yalnızca otomatik olarak başlayacak şekilde ayarlanan sürücüleri seçmek için filtre uygulamak isteyebilirsiniz:

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

Bu, sürücülerin çalıştığını bildiğimiz için artık ihtiyacımız olmayan birçok bilgi sağlar. Aslında, bu noktada ihtiyacımız olan tek bilgi ad ve görünen addır. Aşağıdaki komut yalnızca bu iki özelliği içerir ve çok daha basit bir çıkış elde edilir:

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

Yukarıdaki komutta iki Where-Object öğe vardır, ancak bunlar mantıksal işleç kullanılarak -and tek Where-Object bir öğede ifade edilebilir, örneğin:

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

Standart mantıksal işleçler aşağıdaki tabloda listelenmiştir.

Mantıksal İşleç Anlamı Örnek (true döndürür)
-and Mantıksal ve; her iki taraf da doğruysa true (1 -eq 1) -and (2 -eq 2)
-or Mantıksal veya; her iki taraf da true ise true (1 -eq 1) -or (1 -eq 2)
-not Mantıksal değil; true ve false değerlerini tersine çevirir -not (1 -eq 2)
! Mantıksal değil; true ve false değerlerini tersine çevirir !(1 -eq 2)