通过引用访问列表的问题

时间:2017-02-09 14:08:39

标签: powershell

运行以下代码

$list = @(1,2)
$hash = @{
    foo =  @{"Param1" = [REF]$list}
}

function foo([REF]$Param1){
    $TempList = New-Object System.Collections.ArrayList
    foreach($Entry in $Param1.Value) {
        $Entry++
        [void]$TempList.Add($Entry)
    }
    $Param1.Value = $TempList
}

foreach($Function in $Hash.keys) {
    & $Function @($Hash.$Function)
    #& foo -Param1 ([REF]$list)
}
$list

会给我错误信息

"无法处理参数' Param1'的参数转换。参数类型在参数中是预期的。"

如果我将函数调用与已注释掉的函数调用交换,则脚本可以正常工作。我在哈希的定义中需要改变什么?#34; $ hash"这样参数类型是否正确?

背景: 我想使用配置文件来调用任意参数的任意函数。这有效,但显然不允许我处理输出,因为我事先无法知道函数将返回什么。因此该函数需要直接操作主脚本中的列表。我当然可以将该列表全局化,但我不愿意。或者这可能是更好的解决方案?

1 个答案:

答案 0 :(得分:1)

Per @ PetSerAl的评论,您使用的是数组表达式运算符或@(),而不是splatting运算符或@

这是我使用splatting运算符的代码版本。

$list = @(1,2)
$hash = @{
    foo =  @{"Param1" = [REF]$list}
}

function foo([REF]$Param1){
    $TempList = New-Object System.Collections.ArrayList
    foreach($Entry in $Param1.Value) {
        $Entry++
        [void]$TempList.Add($Entry)
    }
    $Param1.Value = $TempList
}

foreach($Function in $Hash.keys) {
    [HashTable] $params = $Hash.$Function
    & $Function @params
}
$list

输出

2 
3