0

在 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
4

2 回答 2

1

在这种情况下,它将是一个对象列表,而不是一个哈希表。您可以使用New-Object这些属性创建一组对象。如下所示:

$obj = new-object -type psobject
$obj | add-member -name Handles -MemberType NoteProperty -Value 123

等等每个属性。寻找new-object更简单的方法来做同样的事情。

如果您已经有一个对象列表并想要其中的一些属性,请使用Select-Object

于 2012-08-27T07:07:16.270 回答
0

如果您的目标是能够利用 Hashtables 功能使用键/值对轻松查找您的数据,例如通过“ProcessName”,那么您可以这样做。请记住,Powershell 是一个面向对象的 shell。您可以在对象中存储对象。或者在这种情况下,哈希表中的哈希表。

[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

您仍然可以创建一个新对象来将您的进程详细信息存储为哈希表值。PSObject 在将输出发送到文件、屏幕等时具有优势。但是如果您正在查找数据以进行处理,那么我喜欢坚持使用 Hashtables。

于 2013-06-20T22:53:17.380 回答