在Powershell中,如何创建多记录哈希表? 像这样:
> Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
> ------- ------ ----- ----- ----- ------ -- -----------
> 260 25 98568 109684 263 37.80 7896 AcroRd32
> 67 8 1236 3800 30 0.03 2052 atashost
> 122 7 1812 4496 29 0.08 1188 atiesrxx
> 126 10 16204 15936 49 7236 audiodg
> 170 21 12888 21352 106 0.14 5016 CallControl
答案 0 :(得分:1)
在这种情况下,它将是一个对象列表,而不是哈希表。您可以使用New-Object
创建一组具有这些属性的对象。如下所示:
$obj = new-object -type psobject
$obj | add-member -name Handles -MemberType NoteProperty -Value 123
等每个属性。查看new-object
以了解更简单的方法。
如果您已有对象列表并希望从中获取一些属性,请使用Select-Object
答案 1 :(得分:0)
如果您的目标是能够利用Hashtables功能使用键/值对轻松查找数据,例如“ProcessName”,那么您可以执行此操作。请记住,Powershell是一个面向对象的shell。您可以在对象中存储对象。或者在这种情况下,Hashtables中的Hashtables。
[hashtable] $ProcessDetails = @{Handles=260; NPM=25;
PM= 98568; WS=109684; VM=263; CPU=37.80; ID=7896}
$ProcessDetails
[hashtable] $Processes = @{}
$Processes.Add("AcroRd32", $ProcessDetails)
""
$Processes
""
# You can then use the various methods to extract the data.
$Processes.Get_Item("AcroRd32").ID
$Processes.AcroRd32.CPU
$Processes["AcroRd32"].VM
$Processes["AcroRd32"]["ws", "pm", "NPM", "Handles"]
输出:
Name Value
---- -----
ID 7896
WS 109684
NPM 25
Handles 260
VM 263
PM 98568
CPU 37.8
AcroRd32 {ID, WS, NPM, Handles...}
7896
37.8
263
109684
98568
25
260
您仍然可以创建一个New-Object来存储流程详细信息作为Hashtables值。将输出发送到文件,屏幕等时,PSObject具有优势。但是如果您正在进行数据查找以进行处理,那么我喜欢坚持使用Hashtables。