如何在PowerShell的Select-Object表达式中向函数传递两个参数?
如何在PowerShell的Select-Object表达式中向函数传递两个参数?
问题原因
你遇到的问题源于PowerShell独特的函数调用语法:
- 当你用
somefunkystuff( $_.MyName, $_.Number )这种带括号的方式调用函数时,括号内的两个值会被打包成一个数组,作为单个参数传递给函数的第一个参数$p1,第二个参数$p2会处于空值状态。
正确传参方式
PowerShell函数调用不需要用括号包裹参数,直接用空格分隔多个参数即可:
somefunkystuff $_.MyName $_.Number
如果需要更清晰的参数关联,也可以使用命名参数的写法:
somefunkystuff -p1 $_.MyName -p2 $_.Number
修正后的完整代码
function somefunkystuff ($p1, $p2) { # 参数被正确传递后,可直接按预期使用 return $p1.ToString() + $p2.ToString() } $a = [PSCustomObject]@{MyName="jef"; Number=1} $b = [PSCustomObject]@{MyName="john"; Number=2} $c = [PSCustomObject]@{MyName="jonas"; Number=3} @($a, $b, $c) | Select-Object MyName, Number, @{Name="NameId"; Expression={ somefunkystuff $_.MyName $_.Number }}
补充说明
PowerShell中括号的核心作用是表达式分组(用于控制计算优先级),并非函数调用的语法标记。只有调用.NET类的方法时才需要用括号包裹参数列表,而PowerShell自身的函数、脚本块调用始终遵循空格分隔参数的规则。
内容的提问来源于stack exchange,提问作者sotto
相关产品推荐
相关产品推荐

