PowerShell 传递数组作为参考

PowerShell pass array as a reference

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

当我只传递参考时,一切正常。但是当我想传递第二个参数时,它将无法使用 "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),但行不通。有人知道我做错了什么吗?

$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"