Как я могу получить хеш-таблицу в виде массива в PowerShell? - PullRequest
0 голосов
/ 17 июня 2019

У меня есть INI-файл, я печатаю раздел как Hashtable. Могу ли я получить каждое имя и значение 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 голосов
/ 17 июня 2019

Как уже упоминалось в комментариях, неясно, ожидаете ли вы массив, содержащий объекты (ключи и значения) или просто строку.
Если вы после перечисления записей сохраняете пары имя / значение, вы можете просто использовать метод 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, например ::

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

Name                           Value
----                           -----
AS                             ABM,AC8,AKH
0 голосов
/ 17 июня 2019

Вы также можете использовать список, чтобы получить элемент, используя индекс. Вот образец:

$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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...