【问题标题】:In Powershell, how can I create a mulitple records hashtable?在 Powershell 中,如何创建多记录哈希表?
【发布时间】:2012-08-27 06:49:53
【问题描述】:

在 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

【问题讨论】:

    标签: powershell hashtable


    【解决方案1】:

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

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

    对每个属性以此类推。查看new-object 了解更简单的方法。

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

    【讨论】:

      【解决方案2】:

      如果您的目标是能够利用 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
      

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

      【讨论】:

        猜你喜欢
        • 2021-06-29
        • 2018-01-26
        • 2021-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 2012-01-02
        相关资源
        最近更新 更多