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

如何将ValueFromRemainingArguments参数转发给PowerShell函数?

PowerShell 参数转发正确实现方法

问题根源

直接使用Command1 $Remaining时,PowerShell会把整个$Remaining数组当作单个位置参数传递给Command1的第一个参数$Target,但数组内的-Target和Test是命令行参数格式,无法被正确解析为命名参数,最终触发类型转换错误。

正确解决方案:使用Splatting(参数展开)

要让PowerShell像解析原始命令行参数一样处理$Remaining,需要用**@符号**代替$符号展开数组,这就是PowerShell的参数展开(Splatting)特性:

Switch ($Command)
{
  'Command1' { Command1 @Remaining }
  # ...
}

完整修改后的脚本

Param(
  [Parameter(Mandatory)]
  [ValidateSet('Command1', 'Command2')]
  $Command,
  [Parameter(ValueFromRemainingArguments)]
  [string[]]$Remaining
)
function Command1()
{
  Param(
    [Parameter(Mandatory)]
    [string]$Target,
    [string]$Option = 'Default'
  )
  # 测试参数是否正确接收
  Write-Host "Target: $Target, Option: $Option"
}
function Command2()
{
  # 示例实现
  Param(
    [string]$Name
  )
  Write-Host "Name: $Name"
}

Switch ($Command)
{
  'Command1' { Command1 @Remaining }
  'Command2' { Command2 @Remaining }
}

其他无效方法说明

  1. Invoke-Expression Command1 $Remaining:将参数当作字符串拼接执行,容易出现引号转义问题,且存在注入风险,不推荐。
  2. powershell ${function:Command1} -Args $Remaining:会启动新的PowerShell进程执行函数,完全没必要,且同样无法正确解析命名参数。
  3. Start-Process:用于启动独立外部进程,不适合调用当前脚本内的函数,会徒增复杂度。

内容的提问来源于stack exchange,提问作者Maarten ten Velden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:41:03