Menggunakan pemformatan dan pemfilteran

Selesai

Saat Anda bekerja dengan PowerShell, pemfilteran dan pemformatan adalah konsep penting yang perlu dipahami untuk beberapa alasan. Pertama, Anda ingin membuat alur yang menghasilkan hasil yang Anda inginkan. Kedua, Anda ingin melakukannya secara efisien. Baik dalam hal cara Anda menarik data melalui jaringan, dan bagaimana Anda memastikan bahwa hasilnya adalah sesuatu yang dapat Anda kerjakan.

Memfilter ke kiri

Dalam pernyataan alur, memfilter ke kiri berarti memfilter hasil yang Anda inginkan sedini mungkin. Anda dapat menganggap istilah kiri sebagai awal, karena pernyataan PowerShell berjalan dari kiri ke kanan. Idenya adalah untuk membuat pernyataan cepat dan efisien dengan memastikan bahwa himpunan data yang Anda operasikan sekecil mungkin. Prinsip ini benar-benar berperan ketika perintah Anda beroperasi pada penyimpanan data yang lebih besar atau Anda membawa kembali hasil di seluruh jaringan.

Pertimbangkan pernyataan berikut:

Get-Process | Select-Object Name | Where-Object Name -eq 'name-of-process'

Pernyataan ini pertama-tama mengambil semua proses pada komputer. Pernyataan ini pada akhirnya akan memformat respons sehingga hanya properti Name yang tercantum. Pernyataan ini tidak mengikuti prinsip memfilter ke kiri karena beroperasi di semua proses, mencoba memformat respons, lalu memfilter di akhir.

Lebih baik memfilter terlebih dahulu lalu memformat, seperti dalam pernyataan berikut.

Get-Process | Where-Object Name -eq 'name-of-process' | Select-Object Name

Sering kali, cmdlet yang menawarkan pemfilteran bersifat lebih efisien daripada menggunakan Where-Object. Berikut adalah versi pernyataan sebelumnya yang lebih efisien:

Get-Process -Name 'name-of-process' | Select-Object Name

Dalam versi ini, parameter -Name melakukan pemfilteran untuk Anda.

Pemformatan kanan, pemformatan sebagai hal terakhir yang Anda lakukan

Jika memfilter ke kiri berarti memfilter sesuatu sedini mungkin dalam sebuah pernyataan, memformat ke kanan berarti memformat sesuatu selambat mungkin dalam pernyataan. Baik, tapi mengapa saya harus melakukan pemformatan selambat mungkin? Jawabannya adalah karena perintah format mengubah struktur objek tempat hasil Anda terkandung sehingga data Anda tidak lagi ditemukan di properti yang sama. Perubahan ini berdampak pada kemampuan Anda untuk mengambil informasi yang Anda inginkan dengan menggunakan perintah pipa, Select-Object, atau dengan mengulangi hasil dengan foreach.

Pemformatan menghancurkan objek yang sedang Anda hadapi. Lihat panggilan berikut misalnya:

Get-Process 'some process' | Select-Object Name, CPU | Get-Member

Jenis yang Anda dapatkan kembali adalah System.Diagnostics.Process. Sekarang, tambahkan pemformat Format-Table seperti ini:

Get-Process 'some process' | Format-Table Name,CPU | Get-Member

Berfokus pada jenis yang Anda dapatkan kembali, perhatikan bahwa Anda mendapatkan kembali sesuatu yang berbeda:

TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupEndData

Apa jenis ini, tidak penting untuk pelajaran ini. Yang penting untuk disadari adalah bahwa ketika Anda menggunakan semua jenis perintah pemformatan, data Anda berbeda. Dan ketika berbeda, mungkin tidak lagi berisi kolom yang Anda pedulikan. Mari kita ilustrasikan dengan contoh:

Get-Process 'some process' | Select-Object Name, Cpu

Perintah sebelumnya memberi Anda hasil dengan kolom Name dan CPU.

Name       CPU
----       ---
zsh  1.2984395
zsh  0.2522047
zsh  0.2486375
zsh  0.2683466
zsh  0.2681874
zsh  1.6799438
zsh  0.2909816
zsh  0.7855272

Mari kita gunakan pemformatan terlebih dahulu lalu Select-Object, untuk mengilustrasikan hal yang mungkin terjadi jika Anda tidak memformat terakhir:

Get-Process 'some process' | Format-Table Name,CPU | Select-Object Name, CPU

Hasilnya sekarang terlihat seperti ini:

Name CPU
---- ---

Ini kosong, karena Format-Table mengubah objek yang berisi hasil Anda dengan menempatkan data ke properti lain. Data Anda tidak hilang, hanya properti Anda. Perintah PowerShell sebelumnya berusaha menemukan properti tetapi tidak bisa.

Perintah pemformatan harus menjadi hal terakhir yang Anda gunakan dalam pernyataan Anda karena dimaksudkan untuk memformat hal-hal dengan baik untuk presentasi layar. Perintah tersebut tidak dimaksudkan untuk digunakan sebagai cara untuk memfilter atau mengurutkan data Anda.

Perintah pemformatan

Cmdlet yang paling umum digunakan untuk memformat output Anda adalah Format-Table dan Format-List. Secara default, sebagian besar cmdlet memformat output sebagai tabel. Jika Anda tidak ingin output Anda menampilkan properti dalam kolom, gunakan Format-List cmdlet untuk memformat ulang sebagai daftar.