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

PowerShell中ValueFromRemainingArguments=$true时的异常参数解析问题

PowerShell参数解析异常问题分析

函数定义

function test { Param ([parameter(mandatory=$false, position=0, ValueFromRemainingArguments=$true)][object[]]$args) $args }

错误调用方式

test 'filter=(type:'foo')'

结果对比

  • 预期:触发语法错误(字符串嵌套单引号未正确转义)
  • 实际输出:
filter=(type:
foo)

运行环境

PSVersion                      5.1.19041.3031
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.3031
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

原因说明

这是PowerShell 5.1的历史遗留解析行为,结合ValueFromRemainingArguments=$true的特性共同导致的结果,既不是配置遗漏,也不属于严格意义上的bug。

PowerShell规范中,单引号字符串内的单引号需要用连续两个单引号转义(正确写法应为'filter=(type:''foo'')'),但5.1及更早版本存在容错逻辑:当遇到未转义的单引号时,会将其当作当前字符串的结束标记,后续内容被视为独立参数。而你的函数开启了ValueFromRemainingArguments,会把所有剩余参数收集到$args数组中,输出时数组元素默认换行分隔,就出现了你看到的拆分结果。

如果关闭ValueFromRemainingArguments=$true,该调用会直接触发语法错误,因为PowerShell无法正确识别未转义单引号后的内容归属。

内容的提问来源于stack exchange,提问作者Peyre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:50:06