从CMD调用PowerShell脚本时数组参数无法正常填充如何解决?
问题原因
你遇到的数组参数无法正确解析的问题,根源是powershell.exe调用时-File和-Command两个参数的处理逻辑差异:
- 使用
-File参数调用脚本时,PowerShell会把所有后续传入的参数都当做纯字符串依次传递给脚本,不会对参数内容做任何PowerShell语法层面的解析。你传入的burritos,nachos里的逗号,在这个模式下只会被当成普通字符串字符,不会被识别为数组分隔符,所以最终$foods变量得到的是一个完整的字符串burritos,nachos,而不是包含两个元素的数组。 - 改成
-Command参数后,PowerShell会先对后续传入的整段内容做PowerShell语法解析,逗号作为PowerShell里的数组分隔符会被正确识别,自然就能把burritos,nachos拆成两个元素的数组赋值给$foods参数。
修复方案
把masterswitch.cmd里的原有内容:
powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0masterswitch.ps1" %*
替换为:
powershell -ExecutionPolicy ByPass -NoProfile -Command "%~dp0masterswitch.ps1" %*
修改后重新调用masterswitch -n dinner -e burritos,nachos即可得到预期的数组拆分输出。
内容的提问来源于stack exchange,提问作者Adrian Hoffman
相关产品推荐
相关产品推荐

