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"
我正在构建一个菜单并想将一个数组作为参考传递给一个函数。
当我只传递参考时,一切正常。但是当我想传递第二个参数时,它将无法使用 "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"