当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 周五乐趣:查看 PowerShell GridList 中的对象

作者:精品下载站 日期:2024-12-14 07:39:02 浏览:14 分类:玩电脑

周五乐趣:查看 PowerShell GridList 中的对象


PowerShell 易于学习的原因之一是可发现性。想更多地了解特定类型的物体吗?通过管道将其传递给 Get-Member。或者,如果您想查看值,请将其通过管道传递给 Select-Object。

get-ciminstance win32_computersystem | select *

那还不错。或者您可以通过管道连接到 Out-Gridview。

Get-CimInstance win32_computersystem | Select * | out-gridview

然而,对于单个物体来说,想要看到所有的东西并不容易。

[玩转系统] 周五乐趣:查看 PowerShell GridList 中的对象

至少对我来说,更容易的是使用 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 脚本块中,我将对象传递给 Get-Member 以检索属性。然后该函数创建一个哈希表,其中键是每个属性,值是对象中相应的值。

此时,我可以简单地将哈希表写入 Out-Gridview,但列标题会显示“名称”和“值”。这是一个小细节,但我使用带有 Select-Object 的哈希表将“名称”重命名为“属性”。顺便说一下,您可能已经注意到这条线了。


$data.GetEnumerator().GetEnumerator() 

这不是一个错字。如果我通过管道传输多个对象,那么 $data 将是一个哈希表数组,因此我需要为每个对象获取一个枚举器。但现在有了这个功能我就得到了我想要的显示。

get-ciminstance win32_computersystem | select * | out-gridlist -title "Win32_Computersystem"

[玩转系统] 周五乐趣:查看 PowerShell GridList 中的对象

实际上没有任何过滤要做,但您可以单击列标题进行排序。或者您可以使用 -passthru 运行 Out-Gridlist,以便您可以选择属性并将它们传递到管道。

希望这个对你有帮助。负责任地享受。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯