ความสนุกวันศุกร์: ดูออบเจ็กต์ใน PowerShell GridList
สิ่งหนึ่งที่ทำให้ PowerShell เรียนรู้ได้ง่ายคือการค้นพบได้ ต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับวัตถุบางประเภทหรือไม่ ส่งไปที่ Get-Member หรือหากคุณต้องการดูค่าไปป์ไปที่ Select-Object
get-ciminstance win32_computersystem | select *นั่นก็ไม่เลวร้ายนัก หรือคุณสามารถไพพ์ไปที่ Out-Gridview
Get-CimInstance win32_computersystem | Select * | out-gridviewอย่างไรก็ตาม สำหรับวัตถุชิ้นเดียวมันไม่ง่ายเลยที่จะเห็นทุกอย่าง
อย่างน้อยสำหรับฉันสิ่งที่จะง่ายกว่าคือใช้ Out-Gridview แต่ดูคุณสมบัติในรายการเหมือนที่ฉันสามารถทำได้ด้วย Select-Object ดังนั้นฉันจึงเขียนฟังก์ชันขั้นสูงเพื่อทำสิ่งนั้น ฟังก์ชันรับวัตถุที่เข้ามา สร้างแฮชเทเบิลตามคุณสมบัติของวัตถุ จากนั้นจึงแสดงแฮชเทเบิ้ลใน Out-Gridview
Function Out-GridList {
[cmdletbinding()]
Param(
[Parameter(Position=0,Mandatory,ValueFromPipeline)]
[object]$InputObject,
[string]$Title="Out-GridList",
[switch]$Passthru
)
Begin {
#initialize data array
$data=@()
}
Process {
#initialize a hashtable for properties
$propHash = @{}
#get property names from the first object in the array
$properties = $InputObject | Get-Member -MemberType Properties
$properties.name | foreach {
Write-Verbose "Adding $_"
$propHash.add($_,$InputObject.$_)
} #foreach
$data +=$propHash
} #Process
End {
#tweak hashtable output
$data.GetEnumerator().GetEnumerator() |
select @{Name="Property";Expression={$_.name}},Value |
Out-GridView -Title $Title -PassThru:$Passthru
}
} #end Out-Gridlist
ฟังก์ชันจะยอมรับหลายออบเจ็กต์ ซึ่งเป็นเหตุผลว่าทำไมฉันถึงมีอาร์เรย์ข้อมูลเพื่อจัดการหลายไปป์ในออบเจ็กต์ แต่มันทำงานได้ดีที่สุดกับวัตถุชิ้นเดียว ใน Process scriptblock ฉันส่งวัตถุไปที่ Get-Member เพื่อดึงคุณสมบัติ จากนั้นฟังก์ชันจะสร้างแฮชเทเบิลโดยที่คีย์คือแต่ละคุณสมบัติ และค่าคือค่าที่สอดคล้องกันจากออบเจ็กต์
ณ จุดนี้ ฉันสามารถเขียน hashtable ไปยัง Out-Gridview ได้อย่างง่ายดาย แต่ส่วนหัวของคอลัมน์จะระบุชื่อและค่า มันเป็นรายละเอียดเล็กๆ น้อยๆ แต่ฉันใช้แฮชเทเบิลกับ Select-Object เพื่อเปลี่ยนชื่อ "ชื่อ" เป็น "คุณสมบัติ" ยังไงก็ตามคุณอาจสังเกตเห็นบรรทัดนี้
$data.GetEnumerator().GetEnumerator()
นั่นไม่ใช่การพิมพ์ผิด หากฉันไพพ์หลายอ็อบเจ็กต์ $data จะเป็นอาร์เรย์ของแฮชเทเบิล ดังนั้นฉันจึงต้องได้รับตัวแจงนับสำหรับแต่ละรายการ แต่ด้วยฟังก์ชันนี้ ตอนนี้ฉันได้จอแสดงผลที่ต้องการแล้ว
get-ciminstance win32_computersystem | select * | out-gridlist -title "Win32_Computersystem"จริงๆ แล้วไม่มีการกรองใดๆ ให้ทำ แต่คุณสามารถคลิกที่ส่วนหัวของคอลัมน์เพื่อจัดเรียงได้ หรือคุณสามารถรัน Out-Gridlist ด้วย -passthru เพื่อให้คุณสามารถเลือกคุณสมบัติและส่งผ่านไปยังไปป์ไลน์ได้
ฉันหวังว่าคุณจะพบว่าสิ่งนี้มีประโยชน์ เพลิดเพลินอย่างมีความรับผิดชอบ

