You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:57:11