PowerShell跨脚本传递多参数出现参数错位的正确传参方法
问题根因
当前调用写法未正确使用PowerShell的*参数展开(Splatting)*语法:直接用$引用哈希表传参时,PowerShell会将整个哈希表作为单个位置参数,绑定到script1.ps1的第一个参数$parameter1上;第二个必填参数$parameter2未收到任何传入值,因此触发交互提示要求用户手动输入。
正确跨脚本传参实现
方法1:哈希表参数展开(推荐,适合提前组装参数的场景)
预组装哈希表格式的参数集合后,调用脚本时将哈希表变量前的$替换为@,即可触发参数展开逻辑,哈希表内的键值对会自动按参数名匹配,绑定到目标脚本的对应参数上:
$parameters = @{ parameter1 = $parameter1 parameter2 = $parameter2 } # 调用时用@代替$引用参数哈希表完成展开 & "./script1.ps1" @parameters
方法2:按位置顺序直接传参
如果不需要动态组装参数,直接按照脚本param块定义的参数顺序传入值即可:
& "./script1.ps1" $parameter1 $parameter2
注意事项
- *参数展开(Splatting)*是PowerShell原生传参能力,对所有cmdlet、自定义函数、脚本文件均生效
- 只有用
@引用哈希表/数组传参时才会触发展开逻辑,用$引用时只会将整个集合作为单个参数值传递 - 如果需要按位置传参时使用展开能力,可以用数组代替哈希表存储参数值,数组元素顺序和参数定义顺序保持一致即可,调用时同样用
@引用数组变量
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

