如何编写带可选参数与ValueFromRemainingArguments的PowerShell Param段?
PowerShell脚本Param段实现可选参数+剩余参数收集
正确的Param声明
将以下Param段添加到脚本开头即可满足需求:
param( [int]$argInt = 0, [Parameter(Mandatory, ValueFromRemainingArguments)] [ValidateNotNullOrEmpty()] [string[]]$argsRemaining )
参数说明
$argInt:定义为int类型,默认值设为0,未指定Position属性意味着它只能通过显式的-argInt名称绑定参数,不会占用位置参数名额,确保不指定该参数时,所有位置输入都会被收集到剩余参数数组。$argsRemaining:Mandatory标记确保脚本必须接收至少一个参数,对应无参数调用时的报错场景;ValueFromRemainingArguments指定该参数收集所有未被其他参数绑定的输入值;[ValidateNotNullOrEmpty()]与Mandatory配合,确保参数数组不为空或包含空值,触发符合预期的错误提示。
对应预期场景验证
- 无
-argInt传位置参数:.\my-args.ps1 foo bar$argInt使用默认值0,foo和bar被收集到$argsRemaining,输出符合预期。
- 指定
-argInt加剩余参数:.\my-args.ps1 -argInt 33 foo bar33绑定到$argInt,剩余的foo和bar进入$argsRemaining,输出符合预期。
-argInt传入非int值:.\my-args.ps1 -argInt foo- PowerShell自动尝试将字符串
foo转换为int类型失败,触发参数转换错误,符合预期。
- PowerShell自动尝试将字符串
- 无任何参数调用:
.\my-args.ps1- 由于
$argsRemaining是必填参数且不能为空,触发参数验证错误,符合预期。
- 由于
内容的提问来源于stack exchange,提问作者JamesThomasMoon
相关产品推荐
相关产品推荐

