powershell - 将有序哈希表传递给函数

标签 powershell powershell-3.0

如何将有序哈希表传递给函数?

以下引发错误:

The ordered attribute can be specified only on a hash literal node.


function doStuff {
    Param (
        [ordered]$theOrderedHashtable
    )
    $theOrderedHashtable
}

$datFileWithMinSizes  = [ordered]@{"FileA.DAT" = "4"; "FileB.DAT" = "5"; "FileC.DAT" = "91" ; "FileD.DAT" = "847"  }

doStuff -theOrderedHashtable $datFileWithMinSizes

以下不保持正确的顺序:
function doStuff {
    Param (
        [Hashtable]$theOrderedHashtable = [ordered]@{}
    )
    $theOrderedHashtable
}

$datFileWithMinSizes  = [ordered]@{"FileA.DAT" = "4"; "FileB.DAT" = "5"; "FileC.DAT" = "91" ; "FileD.DAT" = "847"  }

doStuff -theOrderedHashtable $datFileWithMinSizes

我目前可以让它工作的唯一方法是不指定类型如下,但我想指定类型:
function doStuff {
    Param (
        $theOrderedHashtable
    )
    $theOrderedHashtable
}

$datFileWithMinSizes  = [ordered]@{"FileA.DAT" = "4"; "FileB.DAT" = "5"; "FileC.DAT" = "91" ; "FileD.DAT" = "847"  }

doStuff -theOrderedHashtable $datFileWithMinSizes

最佳答案

使用完整的类型名称:

function Do-Stuff {
    param(
        [System.Collections.Specialized.OrderedDictionary]$OrderedHashtable
    )
    $OrderedHashtable
}

要同时支持常规哈希表和有序字典,您必须使用单独的参数集:使用 [System.Collections.IDictionary]接口(interface),如suggested by briantist
function Do-Stuff {
    [CmdletBinding(DefaultParameterSetName='Ordered')]
    param(
        [Parameter(Mandatory=$true,Position=0,ParameterSetName='Ordered')]
        [System.Collections.Specialized.OrderedDictionary]$OrderedHashtable,

        [Parameter(Mandatory=$true,Position=0,ParameterSetName='Hashtable')]
        [hashtable]$Hashtable
    )
    if($PSCmdlet.ParameterSetName -eq 'Hashtable'){
        $OrderedHashtable = $Hashtable
    }
    $OrderedHashtable
}

关于powershell - 将有序哈希表传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42568949/

相关文章:

c# - RunSpacePool 如何传递共享变量?

powershell - 在 PowerShell v3 中运行并行 Invoke-WebRequest 作业

powershell - 表达式或语句 powershell 中的意外标记 'if'

checkbox - 如何在使用 powershell 安装 msi 期间设置复选框?

base64 - 使用Powershell解码base64

Powershell 删除项不起作用

string - Powershell,计算文本文件中的字符串出现次数

powershell - 如何使用 get-date 声明一个数组?

powershell - Foreach-Object 与 Foreach 循环的运行时

powershell - 按州和姓名找工作?