PowerShell如何编写支持接收任意数量位置参数的函数
问题原因
你的报错是因为当前的$words参数没有配置剩余参数接收特性,默认情况下每个参数仅能接收一次传值,你传入了两个位置参数hi和Two,函数只能识别第一个参数,第二个没有对应参数位置所以抛出错误。
要实现C#中params关键字接收任意数量位置参数的效果,只需要给参数加上[Parameter(ValueFromRemainingArguments = $true)]标记即可。
修改后的ArgChecker.ps1代码
function Print-Args { [CmdletBinding()] param ( [Parameter(ValueFromRemainingArguments = $true)] [string[]]$words ) Write-Verbose "Count: $($words.Count)" Write-Output "Passed arguments:" $words }
调用方法
你原来的调用命令不需要做任何修改,直接运行即可正常执行:
powershell -ExecutionPolicy Bypass -command "& { . .\ArgChecker.ps1; Print-Args 'hi' 'Two' -Verbose }"
运行后预期输出为:
VERBOSE: Count: 2 Passed arguments: hi Two
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

