从CMD调用带参数的PowerShell脚本函数时参数无法分离的问题排查与解决请求
问题根源:PowerShell函数调用的语法错误
你遇到的问题核心是PowerShell中调用函数的方式不对——在PowerShell里,用foo($param1,$param2)这种写法,会把$param1和$param2打包成一个数组作为单个参数传递给函数foo,而不是分别传递给$fusername和$fpassword两个参数。这就是为什么你的函数输出是Alpha Beta而不是预期的Alpha。
修复方案:修改函数调用方式
把PowerShell脚本里的函数调用语句从:
foo($param1,$param2)
改成:
foo $param1 $param2
修改后的完整PowerShell脚本:
param ([Parameter (Mandatory)]$param1, [Parameter(Mandatory)]$param2 ) function foo{ param ($fusername,$fpassword) write-output $fusername } foo $param1 $param2
验证效果
现在重新执行你的bat命令:
c:\PS>CallMeWithParams.bat Alpha Beta
你会得到预期的输出:
Alpha Beta Alpha
额外注意事项
如果你的参数包含空格(比如用户名是Alpha User),CMD里的双引号包裹会正确传递给PowerShell,只要保持bat里的调用方式不变,同时PowerShell函数调用用空格分隔参数,就可以正确识别。
内容的提问来源于stack exchange,提问作者amon
相关产品推荐
相关产品推荐

