PowerShell传递数组作为参考

时间:2015-09-26 16:19:15

标签: arrays powershell reference hashtable

我正在构建一个菜单,并希望将数组作为参考传递给函数。

当我通过参考时,一切正常。但是当我想传递第二个参数时,它将无法使用“ParameterBindingArgumentTransformationException”。我不明白为什么。

这是 - 工作最小代码:

function Menu {
    param([Ref]$mi)
    Write-Host "var"
    Write-Host $mi.value[0].cmd
    Write-Host $mi.value[1].desc
    Write-Output 0
}


function MainMenu {
    $mm = @(@{desc='Windows Tools';cmd='WinToolsMenue'},
            @{desc='copy setup.exe';cmd='setupexe'},
            @{desc='gpupdate (Policy)';cmd='cmd /c gpupdate /force'},
            @{desc='Exit';cmd='break'})
    $a = Menu([Ref]$mm)
}

& MainMenu

问题代码:

function Menu {
    param([Ref]$mi, $b)
    Write-Host $b
    Write-Host $mi.value[0].cmd
    Write-Host $mi.value[1].desc
    Write-Output 0
}

function MainMenu {

    $mm = @(@{desc='Windows Tools';cmd='WinToolsMenue'},
            @{desc='copy setup.exe';cmd='setupexe'},
            @{desc='gpupdate (Policy)';cmd='cmd /c gpupdate /force'},
            @{desc='Exit';cmd='break'} )
    $mm

    $a = Menu([Ref]$mm, "b")
}

& MainMenu

几乎尝试过([Ref] $ mi),$ b或([Ref] $ mi,$ b),但它不起作用。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

$a = Menu ([Ref]$mm, "b")

这不是你怎么称呼一个功能。请记住,逗号是数组的运算符,括号表示首先计算的表达式。这不会因为你正在调用一个函数而改变。这就是“调用函数Menu,第一个参数是一个包含[Ref]$mm"b"两个元素的数组。基本上,你称之为:

$a = Menu -mi @([Ref]$mm, "b") -b $null

您需要指定:

$a = Menu ([Ref]$mm) "b"

或者:

$a = Menu -mi ([Ref]$mm) -b "b"