บันทึกทั่วไปบางส่วน
$obj | Select-Object ⊆ $obj | Select-Object -Property *
ส่วนหลังจะแสดงคุณสมบัติทั้งหมดที่ไม่ใช่ภายในและไม่ใช่คอมไพเลอร์ที่สร้างขึ้น ก่อนหน้านี้ไม่ปรากฏว่า (เสมอ) แสดงประเภทอสังหาริมทรัพย์ทั้งหมด (ในการทดสอบของฉันดูเหมือนว่าจะแสดงCodeProperty MemberTypeอย่างสม่ำเสมอแม้ว่า - ไม่มีการค้ำประกันที่นี่)
สวิตช์บางตัวที่ควรระวังสำหรับGet-Member
Get-Memberไม่ได้รับสมาชิกแบบคงที่ตามค่าเริ่มต้น นอกจากนี้คุณยังไม่สามารถ (โดยตรง) รวมกับสมาชิกที่ไม่คงที่ นั่นคือการใช้สวิตช์ทำให้สมาชิกคงที่เท่านั้นที่จะถูกส่งคืน:
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)
...
ใช้ไฟล์-Force.
Get-Memberคำสั่งใช้กองทัพพารามิเตอร์ที่จะเพิ่มสมาชิกภายในและสมาชิกคอมไพเลอร์ที่สร้างจากวัตถุที่จะแสดงผล Get-Memberรับสมาชิกเหล่านี้ แต่จะซ่อนพวกเขาโดยค่าเริ่มต้น
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,...
...
ใช้ConvertTo-Jsonสำหรับ "อนุกรม" เชิงลึกและอ่านได้
ฉันไม่จำเป็นแนะนำให้บันทึกวัตถุโดยใช้ JSON (ใช้Export-Clixmlแทน) อย่างไรก็ตามคุณสามารถรับเอาต์พุตที่อ่านได้มากหรือน้อยConvertTo-Jsonซึ่งช่วยให้คุณระบุความลึกได้ด้วย
โปรดทราบว่าการไม่ระบุโดยDepthนัย-Depth 2
PS Y:\Power> ConvertTo-Json $obj -Depth 1
{
"AllowSystemOverload": true,
"AllowLifeToGetInTheWay": false,
"CantAnyMore": true,
"LastResortOnly": true,
...
และถ้าคุณไม่ได้วางแผนที่จะอ่านคุณสามารถทำได้-Compress(เช่นแถบช่องว่าง)
PS Y:\Power> ConvertTo-Json $obj -Depth 420 -Compress
ใช้-InputObjectถ้าคุณทำได้ (และเต็มใจ)
99.9% ของเวลาที่ใช้ PowerShell: ประสิทธิภาพจะไม่สำคัญหรือคุณไม่สนใจเกี่ยวกับประสิทธิภาพ อย่างไรก็ตามควรสังเกตว่าการหลีกเลี่ยงท่อเมื่อคุณไม่ต้องการมันสามารถประหยัดค่าใช้จ่ายบางส่วนและเพิ่มความเร็วได้ (โดยทั่วไปการวางท่อไม่ได้มีประสิทธิภาพสูง)
นั่นคือถ้าคุณมีทั้งหมดที่มี$objประโยชน์สำหรับการพิมพ์ (และบางครั้งก็ไม่ขี้เกียจเหมือนฉันที่จะพิมพ์ออกมา-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
ข้อแม้สำหรับGet-Member -InputObject:
หาก $ obj เป็นคอลเล็กชัน (เช่นSystem.Object[]) คุณจะได้รับข้อมูลเกี่ยวกับวัตถุคอลเลกชันเอง:
PS Y:\Power> gm -InputObject $obj,$obj2
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
...
หากคุณต้องการGet-Memberสำหรับแต่ละTypeNameในคอลเลกชัน (NB สำหรับแต่ละTypeName, ไม่ได้สำหรับแต่ละวัตถุ - คอลเลกชันของ N วัตถุที่มีเหมือนกันทั้งหมดTypeNameจะพิมพ์ 1 ตารางที่TypeNameไม่ยังไม่มีตารางสำหรับแต่ละวัตถุ) ...... เพียงแค่ติดกับท่อโดยตรง
-Forceพารามิเตอร์เพื่อให้มันใช้งานได้เช่นWrite-Host ($obj | Format-List -Force | Out-String)