Memilih data
Menjalankan perintah bisa sangat bermanfaat, Anda mendapatkan data dari komputer lokal Anda atau dari seluruh jaringan. Agar lebih efektif, Anda perlu mempelajari cara mendapatkan data yang Anda inginkan. Sebagian besar perintah beroperasi pada objek, sebagai input atau sebagai output, atau keduanya. Objek memiliki properti dan Anda mungkin ingin mengakses subset dari properti tersebut dan menyajikannya dalam laporan. Anda mungkin juga ingin mengurutkan data berdasarkan satu atau beberapa properti. Tapi bagaimana Anda melakukannya?
Menggunakan Get-Member untuk memeriksa output
Saat Anda meneruskan hasil perintah ke Get-Member
, Get-Member
mengembalikan informasi tentang objek, seperti:
- Jenis objek yang diteruskan ke Get-Member.
- Properti objek yang mungkin dievaluasi.
- Metode objek yang dapat dijalankan.
Mari kita tunjukkan fakta ini dengan menjalankan Get-Member
pada perintah Get-Process
.
Get-Process | Get-Member
Perhatikan bagaimana Anda menggunakan pipa |
dan bahwa dengan memanggil Get-Member
, Anda sebenarnya sudah membuat alur. Beberapa baris output pertama dari pernyataan sebelumnya terlihat seperti:
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
NPM AliasProperty NPM = NonpagedSystemMemorySize64
PM AliasProperty PM = PagedMemorySize64
SI AliasProperty SI = SessionId
VM AliasProperty VM = VirtualMemorySize64
WS AliasProperty WS = WorkingSet64
...
Output menunjukkan jenis objek yang dikembalikan oleh perintah Get-Process
(System.Diagnostics.Process
). Respons lainnya menunjukkan nama, jenis, dan definisi anggota objek. Anda dapat melihat bahwa jika Anda ingin menyesuaikan Get-Process
dengan perintah lain dalam alur, memasangkannya dengan Get-Member
adalah langkah pertama yang baik.
Select-Object
Secara default, saat Anda menjalankan perintah yang akan ditampilkan ke layar, PowerShell secara otomatis menambahkan perintah Out-Default
. Saat data output adalah kumpulan objek, PowerShell melihat jenis objek untuk menentukan apakah ada tampilan terdaftar untuk jenis objek tersebut. Jika menemukannya, ia menggunakan tampilan tersebut.
Tampilan umumnya tidak berisi semua properti objek karena tidak akan ditampilkan dengan benar di layar, sehingga hanya beberapa properti yang paling umum yang disertakan dalam tampilan.
Anda dapat mengambil alih tampilan default dengan menggunakan Select-Object
dan memilih daftar properti Anda sendiri. Anda kemudian dapat mengirim properti tersebut ke Format-Table
atau Format-List
, untuk menampilkan tabel sesuai keinginan Anda.
Pertimbangkan hasil eksekusi Get-Process
pada proses zsh
:
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 0.01 0.38 644 620 zsh
0 0.00 0.01 0.38 727 727 zsh
0 0.00 0.01 0.38 731 731 zsh
0 0.00 0.01 0.38 743 743 zsh
0 0.00 0.01 0.38 750 750 zsh
0 0.00 0.88 0.91 15747 …47 zsh
0 0.00 0.01 0.29 41983 …83 zsh
0 0.00 1.16 0.31 68298 …98 zsh
Apa yang Anda lihat adalah tampilan yang mewakili apa yang kemungkinan besar ingin Anda lihat dari perintah ini. Namun, tampilan ini tidak menunjukkan kepada Anda sekumpulan informasi lengkap. Untuk melihat sesuatu yang berbeda, Anda dapat secara eksplisit menentukan properti mana yang ingin Anda lihat dalam hasilnya.
Mendapatkan respons penuh
Apa yang telah Anda lihat sejauh ini adalah respons terbatas. Untuk menyajikan respons penuh, Anda menggunakan wildcard *
, seperti:
Get-Process zsh | Format-List -Property *
Karakter menunjukkan *
kepada Anda setiap atribut dan nilainya, yang memungkinkan Anda menyelidiki nilai yang Anda minati. Respons lengkap juga menggunakan nama presentasi untuk properti alih-alih nama properti aktual dan nama presentasi terlihat bagus dalam laporan.
Terlepas dari manfaat ini, Anda mungkin tidak menginginkan output data yang lengkap, tetapi Anda mungkin juga tidak puas dengan respons default.
Memilih kolom tertentu
Untuk membatasi respons dan menemukan tengah antara respons default dan respons penuh, Anda ingin memilih beberapa properti yang Anda minati dan memilikinya sebagai input parameter ke Select-Object
. Tapi, dan inilah masalahnya, Anda perlu menggunakan nama asli untuk kolom. Bagaimana cara mengetahui nama aslinya? Gunakan Get-Member
. Panggilan untuk Get-Member
memberi Anda semua properti dan nama mereka yang sebenarnya.
Menemukan nama properti asli
Mari kita rekap cepat pada respons default, dengan subset ini:
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 0.01 0.38 644 620 zsh
Dari respons default, properti Id
dan ProcessName
kemungkinan besar disebut sama, tetapi CPU adalah nama presentasi, nama properti nyata cenderung hanya terdiri dari karakter teks dan tanpa spasi. Untuk mengetahui nama asli untuk properti tertentu, Anda dapat menggunakan Get-Member
:
Get-Process zsh | Get-Member -Name C*
Anda sekarang mendapatkan daftar semua anggota dengan nama yang dimulai dengan C
. Di antaranya adalah CPU
, yang kemungkinan besar Anda inginkan:
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
CancelErrorRead Method void CancelErrorRead()
CancelOutputRead Method void CancelOutputRead()
Close Method void Close()
CloseMainWindow Method bool CloseMainWindow()
Container Property System.ComponentModel.IContainer Container {get;}
CommandLine ScriptProperty System.Object CommandLine {get=…
Company ScriptProperty System.Object Company {get=$this.Mainmodule.FileVersionInfo.CompanyName;}
CPU ScriptProperty System.Object CPU {get=$this.TotalProcessorTime.TotalSeconds;}
Sekarang Anda tahu cara menggunakan Select-Object
untuk menanyakan apa yang Anda butuhkan dengan nama properti yang benar, seperti:
Get-Process zsh | Select-Object -Property Id, Name, CPU
Berikut hasilnya:
Id Name CPU
-- ---- ---
644 zsh 0.3812141
727 zsh 0.3826498
731 zsh 0.3784953
743 zsh 0.3776352
750 zsh 0.3824036
15747 zsh 0.9097993
41983 zsh 0.2934763
68298 zsh 0.3121695
Urutan perintah ini memberi Anda output yang berbeda dari output default tetapi berisi properti yang Anda pedulikan.
Pengurutan
Saat Anda menggunakan Sort-Object
dalam alur, PowerShell mengurutkan data output dengan menggunakan properti default terlebih dahulu. Jika tidak ada properti seperti itu, Powershell kemudian mencoba membandingkan objek itu sendiri. Pengurutan dilakukan dengan urutan naik atau turun.
Dengan menyediakan properti, Anda dapat memilih untuk menurutkan menurut kolom tertentu, seperti:
Get-Process | Sort-Object -Descending -Property Name
Dalam perintah sebelumnya, kita mengurutkan menurut kolom Name
dalam urutan menurut. Untuk mengurutkan menurut lebih dari satu kolom, pisahkan nama kolom dengan koma, seperti:
Get-Process | Sort-Object -Descending -Property Name, CPU
Selain mengurutkan berdasarkan nama kolom, Anda juga dapat memberikan ekspresi kustom Anda sendiri. Dalam contoh ini, kita menggunakan ekspresi khusus untuk mengurutkan menurut kolom Name
dan CPU
serta mengontrol urutan sortir untuk setiap kolom.
Get-Process 'some process' | Sort-Object -Property @{Expression = "Name"; Descending = $True}, @{Expression = "CPU"; Descending = $False}
Contoh sebelumnya menunjukkan betapa kuat dan fleksibelnya Sort-Object
. Subjek ini sedikit canggih dan di luar cakupan untuk modul ini, tetapi ditinjau kembali dalam modul yang lebih canggih.