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 MemberTypesecara konsisten meskipun - tidak ada jaminan di sini).
Beberapa sakelar yang harus diperhatikan untuk Get-Member
Get-Membertidak 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-Memberperintah menggunakan Angkatan parameter untuk menambahkan anggota intrinsik dan anggota compiler yang dihasilkan dari objek untuk layar. Get-Membermendapatkan 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-Jsonuntuk "serialisasi" yang mendalam dan dapat dibaca
Saya tidak perlu merekomendasikan menyimpan objek menggunakan JSON (gunakan Export-Clixmlsebagai 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 Depthberarti-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 -Compressmembacanya (yaitu menghapus spasi)
PS Y:\Power> ConvertTo-Json $obj -Depth 420 -Compress
Gunakan -InputObjectjika 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 $objberguna 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-Memberuntuk setiap TypeNamedalam koleksi (NB untuk masing-masing TypeName, bukan untuk setiap objek - kumpulan N objek dengan semua yang sama TypeNamehanya akan mencetak 1 tabel untuk itu TypeName, bukan N tabel untuk setiap objek) ...... cukup tetap dengan menyalurkannya secara langsung.
-Forceparameter agar berfungsi, misalnyaWrite-Host ($obj | Format-List -Force | Out-String)