如何在PowerShell中将哈希表作为数组获取?

时间:2019-06-17 03:27:48

标签: powershell

我有一个INI文件,我将一部分打印为Hashtable。我可以获取哈希表的每个名称和值作为数组吗? 当我打印哈希表时,这是我的INI文件。

Name                           Value                                              
----                           -----                                              
P1                             ABN,ABB,ABY                                        
S2                             AKS,AKE                                            
AS                             ABM,AC8,AKH                                        
JP                             ABJ,ACF                                            
RU                             ACB         
Function Location
{
    $FilePath = "C:\Users\xx\Documents\loc.ini"
    $section = "RegionMap"

    $store = "C:\Users\xx\Documents"
    $input_file = $FilePath
    $ini_file = @{}

    Get-Content $input_file | ForEach-Object {
    $_.Trim()
    } | Where-Object {


    $_ -notmatch '^(;|$)'
    } | ForEach-Object {
    if ($_ -match '^\[.*\]$') {
        $section = $_ -replace '\[|\]'
        $ini_file[$section] = @{}
    } else {
        $key, $value = $_ -split '\s*=\s*', 2
        $ini_file[$section][$key] = $value

    }
    }
       $Get_1 = $ini_file.($section)

    }
    return Location

我的期望

array[0] = P1    ABN,ABB,ABY 
array[1] = S2    AKS,AKE

2 个答案:

答案 0 :(得分:0)

您还可以使用列表使用索引获取项目。这是示例:

$ini_file = @{} # your hastable ...  
$list = New-Object Collections.Generic.List[String] # List

$ini_file.Add("one",1); 
$ini_file.Add("two",2); 
$ini_file.Add("three",3);

foreach( $k in $ini_file.Keys )
{
     $list.Add("$k `t $($ini_file[$k])")
}

$list[0]

输出将是:

  

一个1

答案 1 :(得分:0)

如注释中所述,尚不清楚您是否期望包含对象(键和值)或仅包含字符串的数组。
如果要枚举条目并保留名称/值对,则可以考虑简单地使用GetEnumerator方法并将其转换为数组(通过将其嵌入@(...)):

$Array = @($HashTable.GetEnumerator())
$Array[2].Name
AS
$Array[2].Value
ABM,AC8,AKH

如果您实际上在寻找一个字符串,则可以轻松地将结果数组中的名称/值对动态地连接起来:

$Array | ForEach-Object {"$($_.Name)`t$($_.Value)"}
P1      ABN,ABB,ABY
JP      BJ,ACF
AS      ABM,AC8,AKH
S2      AKS,AKE
RU      ACB

此外,您仍然可以使用Where-Object cmdlet搜索数组,例如:

$Array | Where-Object {$_.Name -eq 'AS'}

Name                           Value
----                           -----
AS                             ABM,AC8,AKH