Powershell Array of Hashtable - PullRequest
       0

Powershell Array of Hashtable

1 голос
/ 18 февраля 2020

Как передать некоторые данные из параметра в массив Hashtable?

filnemane.ps1 -param @{ a = 1, b = 2, c =3}, @{ a = 4, b = 5, c =6}

на этот вывод:

$param = @(
           @{
             a=1,
             b=2,
             c=3
            },
           @{
             a=4,
             b=5,
             c=6
            }
          )

Спасибо.

1 Ответ

5 голосов
/ 18 февраля 2020

Вы объявляете параметр типа [hashtable[]] (т. Е. Массив [hashtable]):

# filename.ps1
param(
    [hashtable[]]$Hashtables
)

Write-Host "Hashtables: @("
foreach($hashtable in $Hashtables){
    Write-Host "  @{"
    foreach($entry in $hashtable.GetEnumerator()){
        Write-Host "    " $entry.Key = $entry.Value
    }
    Write-Host "  }"
}
Write-Host ")"

При вводе образца вы получите что-то вроде:

PS C:\> .\filename.ps1 -Hashtables @{ a = 1; b = 2; c =3},@{ a = 4; b = 5; c =6}
Hashtables: @(
  @{
     c = 3
     b = 2
     a = 1
  }
  @{
     c = 6
     b = 5
     a = 4
  }
)

Обратите внимание, что выходные данные не обязательно сохранят порядок клавиш из ввода, потому что, ну, это не так, как работают sh таблицы:)


As Мэтью услужливо указывает , если важно поддерживать порядок ключей, go с упорядоченным словарем ([ordered]@{}).

Для поддержки принятия любого вида без изменения порядка ключей объявите тип параметра как массив [System.Collections.IDictionary] - интерфейс, который реализуют оба типа:

param(
    [System.Collections.IDictionary[]]$Hashtables
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...