Beberapa catatan umum.
$obj | Select-Object
⊆ $obj | Select-Object -Property *
Yang terakhir akan menampilkan semua properti non-intrinsik, non-kompilator. Mantan tidak tidak muncul untuk (selalu) menunjukkan semua jenis properti (di tes saya, itu tidak muncul untuk menunjukkan CodeProperty
MemberType
secara konsisten meskipun - tidak ada jaminan di sini).
Beberapa sakelar yang harus diperhatikan untuk Get-Member
Get-Member
tidak tidak mendapatkan anggota statis secara default. Anda juga tidak bisa (secara langsung) membawanya bersama dengan anggota non-statis. Artinya, menggunakan sakelar menyebabkan hanya anggota statis yang dikembalikan:
PS Y:\Power> $obj | Get-Member -Static
TypeName: System.IsFire.TurnUpProtocol
Name MemberType Definition
---- ---------- ----------
Equals Method static bool Equals(System.Object objA, System.Object objB)
...
Gunakan -Force
.
The Get-Member
perintah menggunakan Angkatan parameter untuk menambahkan anggota intrinsik dan anggota compiler yang dihasilkan dari objek untuk layar. Get-Member
mendapatkan anggota ini, tetapi menyembunyikannya secara default.
PS Y:\Power> $obj | Get-Member -Static
TypeName: System.IsFire.TurnUpProtocol
Name MemberType Definition
---- ---------- ----------
...
pstypenames CodeProperty System.Collections.ObjectModel.Collection...
psadapted MemberSet psadapted {AccessRightType, AccessRuleType,...
...
Gunakan ConvertTo-Json
untuk "serialisasi" yang mendalam dan dapat dibaca
Saya tidak perlu merekomendasikan menyimpan objek menggunakan JSON (gunakan Export-Clixml
sebagai gantinya). Namun, Anda bisa mendapatkan lebih banyak atau lebih sedikit keluaran yang dapat dibaca ConvertTo-Json
, yang juga memungkinkan Anda menentukan kedalaman.
Perhatikan bahwa tidak menentukan Depth
berarti-Depth 2
PS Y:\Power> ConvertTo-Json $obj -Depth 1
{
"AllowSystemOverload": true,
"AllowLifeToGetInTheWay": false,
"CantAnyMore": true,
"LastResortOnly": true,
...
Dan jika Anda tidak berencana untuk membacanya, Anda dapat -Compress
membacanya (yaitu menghapus spasi)
PS Y:\Power> ConvertTo-Json $obj -Depth 420 -Compress
Gunakan -InputObject
jika Anda bisa (dan mau)
99,9% dari waktu saat menggunakan PowerShell: entah kinerjanya tidak penting, atau Anda tidak peduli dengan kinerjanya. Namun , perlu dicatat bahwa menghindari pipa saat Anda tidak membutuhkannya dapat menghemat overhead dan menambah kecepatan (pemipaan, secara umum, tidak super efisien).
Artinya, jika yang Anda miliki hanyalah satu yang $obj
berguna untuk dicetak (dan terkadang tidak terlalu malas seperti saya untuk mengetik -InputObject
):
# select is aliased (hardcoded) to Select-Object
PS Y:\Power> select -Property * -InputObject $obj
# gm is aliased (hardcoded) to Get-Member
PS Y:\Power> gm -Force -InputObject $obj
Peringatan untuk Get-Member -InputObject
:
Jika $ obj adalah sebuah koleksi (mis. System.Object[]
), Anda akhirnya mendapatkan informasi tentang objek koleksi itu sendiri:
PS Y:\Power> gm -InputObject $obj,$obj2
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
...
Jika Anda ingin Get-Member
untuk setiap TypeName
dalam koleksi (NB untuk masing-masing TypeName
, bukan untuk setiap objek - kumpulan N objek dengan semua yang sama TypeName
hanya akan mencetak 1 tabel untuk itu TypeName
, bukan N tabel untuk setiap objek) ...... cukup tetap dengan menyalurkannya secara langsung.
-Force
parameter agar berfungsi, misalnyaWrite-Host ($obj | Format-List -Force | Out-String)