【问题标题】:Powershell Array of Hashtable哈希表的 Powershell 数组
【发布时间】:2020-02-18 18:49:28
【问题描述】:

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

谢谢。

【问题讨论】:

  • 我不理解“到此输出”部分,因为仍在输入参数。但-param = @{ ... } 中的= 无效。否则,您希望您的脚本创建哈希表的哈希表吗?用什么钥匙?或者您希望在脚本接收到哈希表之前组合它们?
  • @BACON 抱歉,打错字了。

标签: powershell


【解决方案1】:

您将参数声明为[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] 的数组 - 两种类型都实现的接口:

param(
    [System.Collections.IDictionary[]]$Hashtables
)

【讨论】:

  • 除此之外,如果你想保留顺序,你可以将参数声明为[ordered[]],它是一个有序的字典对象,它的功能类似于[hashtable],但保留了顺序您输入了您的数据。
  • 对不起,数组变量,但我试过这个不确定为什么输出只是哈希表:@()
  • @TenUy 在脚本中,$Hashtables已经是一个数组变量!你可以用你需要的任何东西替换我的代码。以$hashtables[0] 为例
猜你喜欢
  • 2016-06-01
  • 2013-07-19
  • 2012-04-10
  • 2017-02-18
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多