Memformat Pembelajaran Sekolah Geek, Menapis dan Membandingkan di PowerShell
Dalam edisi Geek School ini, kita melihat pemformatan, penapisan dan membandingkan objek dalam Paip.
Pastikan anda membaca artikel sebelumnya dalam siri ini:
- Ketahui Bagaimana Mengotomatikkan Windows dengan PowerShell
- Belajar Menggunakan Cmdlets di PowerShell
- Belajar Cara Menggunakan Objek di PowerShell
Dan tunggu selama siri sepanjang minggu.
Pemformatan Lalai
Apabila saya mula-mula dengan PowerShell, saya fikir semuanya adalah sihir, tetapi sebenarnya ia memerlukan sedikit masa untuk memahami apa yang berlaku di bawah hud. Perkara yang sama berlaku untuk sistem pemformatan PowerShell. Sebenarnya, jika anda menjalankan cmdlet Get-Service, output yang dihasilkan hanya menunjukkan 3 sifat: Status, Nama dan PaparanName.
Tetapi jika anda mendapat Get-Service pipe Get-Member, anda melihat bahawa objek ServiceController mempunyai lebih daripada sekadar ketiga-tiga sifat ini, jadi apa yang berlaku?
Jawapannya terletak dalam fail tersembunyi yang mendefinisikan bagaimana kebanyakan cmdlet terbina dalam memaparkan output mereka. Untuk mendapatkan pemahaman, taipkan yang berikut ke dalam shell dan tekan enter.
notepad C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Jika kita menggunakan fungsi Find Notepad, kita dengan cepat boleh melangkau ke bahagian yang memperincikan keluaran cmdlet Get-Service dengan mencari jenis ServiceController.
Tiba-tiba, anda boleh melihat bahawa di bawah hood PowerShell adalah format mana-mana objek dalam Pipeline yang adalah jenis ServiceController dan mewujudkan jadual dengan tiga tiang: Status, Nama, dan DisplayName. Tetapi bagaimana jika jenis yang anda berurusan tidak mempunyai entri dalam fail itu, atau fail format lain untuk perkara itu? Nah, ia agak mudah sebenarnya. Sekiranya objek yang keluar dari saluran paip mempunyai 5 atau lebih sifat, PowerShell memaparkan semua sifat objek dalam senarai; jika ia mempunyai kurang daripada 5 sifat, ia memaparkannya dalam jadual.
Memformat Data Anda
Sekiranya anda tidak gembira dengan pemformatan lalai objek atau jenis, anda boleh melancarkan pemformatan anda sendiri. Terdapat tiga cmdlet yang anda perlu tahu untuk melakukan ini.
- Format-List
- Format-Jadual
- Format-Wide
Format-Wide hanya mengambil koleksi objek dan memaparkan harta tunggal bagi setiap objek. Secara lalai, ia akan mencari harta nama; jika objek anda tidak mengandungi nama nama, ia akan menggunakan harta pertama objek sebaik sahaja sifat-sifat telah disusun mengikut abjad.
Get-Service | Format-Wide
Seperti yang anda dapat lihat, ia juga mungkir kepada dua lajur, walaupun anda boleh menentukan sama ada harta yang anda mahu gunakan, dan berapa banyak lajur yang anda mahu dipaparkan.
Get-Service | Format-Wide -Property DisplayName -Column 6
Sekiranya sesuatu diformat sebagai jadual secara lalai, anda sentiasa boleh menukarnya ke senarai pandangan dengan menggunakan cmdlet Format-Senarai. Mari kita perhatikan keluaran cmdlet Get-Process.
Pandangan tabular ini sebenarnya sesuai dengan jenis maklumat ini dengan sangat baik, tetapi mari kita berpura-pura kita mahu melihatnya dalam bentuk senarai. Apa yang kita perlu lakukan ialah paip ke Format-List.
Get-Process | Format-List
Seperti yang anda dapat lihat terdapat hanya empat item yang dipaparkan dalam senarai secara lalai. Untuk melihat semua sifat objek, anda boleh menggunakan watak kad liar.
Get-Process | Format-Senarai -Property *
Sebagai alternatif, anda boleh memilih hanya sifat yang anda mahukan.
Get-Process | Format Senarai-NamaProperty, id
Format-Jadual, Sebaliknya, mengambil data dan mengubahnya menjadi satu jadual. Oleh kerana data kami dari Get-Process sudah dalam bentuk jadual, kita boleh menggunakannya dengan mudah memilih sifat yang kita mahu dipaparkan di dalam jadual. Saya menggunakan parameter AutoSize untuk menjadikan semua data sesuai ke skrin tunggal.
Get-Process | Nama jadual-jadual, id -AutoSize
Penapisan dan Pembandingan
Salah satu perkara terbaik tentang menggunakan saluran paip berasaskan objek ialah anda boleh menapis objek keluar dari saluran paip pada mana-mana peringkat menggunakan cmdlet Di mana-Objek.
Get-Service | Where-Object $ _. Status -eq "Running"
Menggunakan objek di mana sebenarnya sangat mudah. $ _ mewakili objek saluran paip semasa, dari mana anda boleh memilih harta yang anda mahu menapis. Di sini, hanya menyimpan objek di mana status Status sama dengan Running. Terdapat beberapa operator perbandingan yang boleh anda gunakan dalam blok skrip penapisan:
- eq (sama rata)
- neq (Tidak sama dengan)
- gt (Greater Than)
- ge (Lebih daripada atau sama)
- lt (Kurang Daripada)
- le (Kurang Daripada atau Sama Ke)
- seperti (Wildcard String Match)
Senarai lengkap dan maklumat lanjut boleh dilihat dalam fail bantuan konsep tentang_kompleks, namun memerlukan sedikit masa untuk digunakan pada sintaks Dimana-Obeject. Itu sahaja buat masa ini!