在Powershell中,如何创建多记录哈希表?

时间:2012-08-27 06:49:54

标签: powershell hashtable

在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

2 个答案:

答案 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。