Hashtable 的 Powershell 数组

Ten*_* Uy 3 powershell

如何将一些数据从参数传递到哈希表数组?

filnemane.ps1 -param @{ a = 1, b = 2, c =3}, @{ a = 4, b = 5, c =6}
Run Code Online (Sandbox Code Playgroud)

到这个输出:

$param = @(
           @{
             a=1,
             b=2,
             c=3
            },
           @{
             a=4,
             b=5,
             c=6
            }
          )
Run Code Online (Sandbox Code Playgroud)

谢谢。

Mat*_*sen 6

您将参数声明为类型[hashtable[]](即[hashtable]'s的数组):

# 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 ")"
Run Code Online (Sandbox Code Playgroud)

有了你的样本输入,你会得到类似的东西:

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
  }
)
Run Code Online (Sandbox Code Playgroud)

请注意,输出不一定会保留输入中的键顺序,因为,这不是哈希表的工作方式:)


正如Matthew 有帮助地指出的那样,如果维护键顺序很重要,请改用有序字典 ( [ordered]@{})。

为了支持在不弄乱键顺序的情况下接受任何一种,将参数类型声明为一个数组[System.Collections.IDictionary]- 两个类型都实现的接口:

param(
    [System.Collections.IDictionary[]]$Hashtables
)
Run Code Online (Sandbox Code Playgroud)