บันทึกทั่วไปบางส่วน
$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)