2012-08-27 86 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。