我在 PowerShell 脚本中遇到问题:
当我想将一个哈希表传递给一个函数时,这个哈希表不被识别为一个哈希表。
function getLength(){
param(
[hashtable]$input
)
$input.Length | Write-Output
}
$table = @{};
$obj = New-Object PSObject;$obj | Add-Member NoteProperty Size 2895 | Add-Member NoteProperty Count 5124587
$table["Test"] = $obj
$table.GetType() | Write-Output ` Hashtable
$tx_table = getLength $table `Unable to convert System.Collections.ArrayList+ArrayListEnumeratorSimple in System.Collections.Hashtable
为什么?
最佳答案
$Input
是一个 automatic variable 枚举给定的输入。
选择任何其他变量名称,它将起作用 - 尽管不一定像您期望的那样 - 要获取哈希表中的条目数,您需要检查 Count
属性:
function Get-Length {
param(
[hashtable]$Table
)
$Table.Count
}
当您将
Write-Output
保持原样时,隐含了 $Table.Count
。此外,当您使用
()
内联声明参数时,函数名称中的 Param()
后缀是不必要的语法糖,其含义为零 - 删除它关于powershell - 将哈希表作为参数传递给 PowerShell 中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30189175/