哈希表的 Powershell 数组

标签 powershell

如何将参数中的一些数据传递给 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
            }
          )

谢谢。

最佳答案

您将参数声明为 [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
  }
)

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

Matthew helpfully points out ,如果维护键顺序很重要,请改用有序字典( [ordered]@{} )。

要支持接受任何一种而不弄乱键顺序,请将参数类型声明为 [System.Collections.IDictionary] 的数组。 - 两种类型都实现的接口(interface):
param(
    [System.Collections.IDictionary[]]$Hashtables
)

关于哈希表的 Powershell 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60287601/

相关文章:

powershell - 用于获取所有虚拟机的正常运行时间的 Azure powershell 命令

powershell - 无法从 Powershell 将 Chrome 设置为默认浏览器

powershell - 如何使用用户凭据在 Powershell 中运行 Start-Process?

powershell - 如何以管理员身份在新的Powershell实例中运行cmd命令

azure - 无法获取运行手册测试(在门户中)来请求输入参数

windows - 运行独立的 Windows Powershell

powershell - MS 通过创建 PowerShell 解决了什么问题?

regex - 带有Select-String的PowerShell RegEx不返回任何行

sql-server - 如何通过powershell关闭数据库加密

json - PowerShell:包含特殊字符的ConvertTo-Json问题