将哈希表作为参数传递给PowerShell中的函数

将哈希表作为参数传递给PowerShell中的函数,powershell,Powershell,我在PowerShell脚本中遇到问题: 当我想将哈希表传递给函数时,该哈希表不会被识别为哈希表 function getLength(){ param( [hashtable]$input ) $input.Length | Write-Output } $table = @{}; $obj = New-Object PSObject;$obj | Add-Member NoteProperty Size 2895 | Add-Member Not

我在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
是一个枚举给定输入的函数

选择任何其他变量名,它将起作用——尽管不一定像您预期的那样——以获取哈希表中的条目数,您需要检查
计数
属性:

function Get-Length {
    param(
        [hashtable]$Table
    )

    $Table.Count
}
当您只保留
$表时,
写入输出
。按原样计数


此外,函数名中的
()
后缀是不必要的语法糖,当您在
Param()
中内联声明参数时,它的意义为零-删除它

我真的不确定在这里评论什么,这似乎是不言自明的。如果没有,请留下评论,我会澄清

$ExampleHashTable = @{
    "one" = "the loneliest number"
    "two" = "just as bad as one"
}

Function PassingAHashtableToAFunctionTest {
    param(
        [hashtable] $PassedHashTable,
        [string] $AHashTableElement
    )

    Write-Host "One is ... " 
    Write-Host $PassedHashTable["one"]
    Write-Host "Two is ... " 
    Write-Host $AHashTableElement
}

PassingAHashtableToAFunctionTest -PassedHashTable $ExampleHashTable `
    -AHashTableElement $ExampleHashTable["two"]
输出:

One is ... 
the loneliest number
Two is ... 
just as bad as one

天啊。感谢您提供的解决方案和建议。