如何将一些数据从参数传递到哈希表数组?
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
}
)
谢谢。
答案 0 :(得分:5)
您声明参数为[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
)