我在 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/

10-16 22:26