Menghapus objek dari alur
Di PowerShell, Anda sering membuat dan meneruskan lebih banyak objek ke alur daripada yang Anda inginkan. Anda dapat menentukan properti objek tertentu untuk ditampilkan menggunakan Format-*
cmdlet, tetapi ini tidak membantu dengan masalah menghapus seluruh objek dari tampilan. Anda mungkin ingin memfilter objek sebelum akhir alur, sehingga Anda dapat melakukan tindakan hanya pada subset objek yang awalnya dihasilkan.
PowerShell menyertakan Where-Object
cmdlet yang memungkinkan Anda menguji setiap objek dalam alur dan hanya meneruskannya di sepanjang alur jika memenuhi kondisi pengujian tertentu. Objek yang tidak lulus pengujian dihapus dari alur. Anda menyediakan kondisi pengujian sebagai nilai parameter FilterScript .
Melakukan pengujian sederhana dengan Where-Object
Nilai FilterScript adalah blok skrip - satu atau beberapa perintah PowerShell yang dikelilingi oleh kurung kurawal ({}
) - yang mengevaluasi ke true atau false. Blok skrip ini bisa sederhana, tetapi membuatnya perlu mengetahui konsep PowerShell lain, operator perbandingan. Operator perbandingan membandingkan item yang muncul di setiap sisinya. Operator perbandingan dimulai dengan karakter tanda hubung (-
) dan diikuti dengan nama. Operator perbandingan dasar bekerja pada hampir semua jenis objek. Operator perbandingan yang lebih canggih mungkin hanya berfungsi pada teks atau array.
Catatan
Secara default, operator perbandingan PowerShell tidak peka huruf besar/kecil.
Karena pertimbangan penguraian, simbol seperti <
,>
, dan =
tidak digunakan sebagai operator perbandingan. Sebaliknya, operator perbandingan terdiri dari huruf. Operator perbandingan dasar tercantum dalam tabel berikut.
Operator Perbandingan | Makna | Contoh (mengembalikan true) |
---|---|---|
-eq | adalah sama dengan | 1 -eq 1 |
-ne | tidak sama dengan | 1 -ne 2 |
-lt | Kurang dari | 1 -lt 2 |
-le | Kurang dari atau sama dengan | 1 -le 2 |
-gt | Lebih besar dari | 2 -gt 1 |
-ge | Lebih besar atau sama dengan | 2 -ge 1 |
-Seperti | Seperti (perbandingan kartubebas untuk teks) | "file.doc" -seperti "f*.do?" |
-notlike | tidak seperti (perbandingan kartubebas untuk teks) | "file.doc" -tidak seperti "p*.doc" |
-contains | Berisi | 1,2,3 -berisi 1 |
-notcontains | tidak berisi | 1,2,3 -notcontains 4 |
Where-Object
Blok skrip menggunakan variabel $_
khusus untuk merujuk ke objek saat ini dalam alur. Berikut adalah contoh cara kerjanya. Jika Anda memiliki daftar angka, dan hanya ingin mengembalikan angka yang kurang dari 3, Anda dapat menggunakan Where-Object
untuk memfilter angka dengan mengetik:
1,2,3,4 | Where-Object {$_ -lt 3}
1
2
Pemfilteran berdasarkan properti objek
Karena $_
mengacu pada objek alur saat ini, kita dapat mengakses propertinya untuk pengujian kita.
Sebagai contoh, kita dapat melihat kelas Win32_SystemDriver di WMI. Mungkin ada ratusan driver sistem pada sistem tertentu, tetapi Anda mungkin hanya tertarik pada set driver sistem tertentu, seperti yang sedang berjalan. Untuk kelas Win32_SystemDriver, properti yang relevan adalah Status. Anda dapat memfilter driver sistem, memilih hanya yang sedang berjalan dengan mengetik:
Get-CimInstance -Class Win32_SystemDriver |
Where-Object {$_.State -eq 'Running'}
Ini masih menghasilkan daftar panjang. Anda mungkin ingin memfilter untuk hanya memilih driver yang diatur untuk memulai secara otomatis dengan menguji nilai StartMode juga:
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
...
Ini memberi kita banyak informasi yang tidak lagi kita butuhkan karena kita tahu bahwa driver sedang berjalan. Bahkan, satu-satunya informasi yang mungkin kita butuhkan pada saat ini adalah nama dan nama tampilan. Perintah berikut hanya mencakup dua properti tersebut, menghasilkan output yang jauh lebih sederhana:
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
...
Ada dua Where-Object
elemen dalam perintah di atas, tetapi dapat diekspresikan dalam satu Where-Object
elemen menggunakan -and
operator logis, seperti ini:
Get-CimInstance -Class Win32_SystemDriver |
Where-Object {($_.State -eq 'Running') -and ($_.StartMode -eq 'Manual')} |
Format-Table -Property Name,DisplayName
Operator logis standar tercantum dalam tabel berikut.
Operator Logis | Makna | Contoh (mengembalikan true) |
---|---|---|
-and |
Logis dan; true jika kedua belah pihak benar | (1 -eq 1) -and (2 -eq 2) |
-or |
Logis atau; true jika salah satu sisi benar | (1 -eq 1) -or (1 -eq 2) |
-not |
Logis tidak; membalikkan true dan false | -not (1 -eq 2) |
! |
Logis tidak; membalikkan true dan false | !(1 -eq 2) |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk