2012-08-27 83 views
0

在Powershell中,我如何创建一个多重记录哈希表? 像这些:在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 

回答

1

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

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

等等每个属性。查看new-object以获取更简单的方法。

如果你已经有对象的列表,并希望从他们几个属性,使用Select-Object

0

如果你的目标是能够利用使用键/值对可以轻松地查找您的数据散列表的能力,就像“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。