我在使用应该使用可变数量参数的脚本运行PowerShell时遇到了问题。
脚本文件如下所示:
param( [string]$paramString )
$params = ConvertFrom-StringData $paramString
$params
直接在powershell中运行脚本会产生预期的结果:
[PS] C:\some\path>.\test.ps1 "a=foo `n b=bar `n c=moo"
Name Value
---- -----
c moo
a foo
b bar
使用相同的脚本和参数从命令行调用powershell会显示:
C:\some\path>powershell -nologo -file ./test.ps1 "a=foo `n b=bar `n c=moo"
Name Value
---- -----
a foo `n b=bar `n c=moo
似乎传递的字符串采用某种格式,因此ConvertFrom-StringData
函数无法解析它。
答案 0 :(得分:2)
使用-File
的方法是有问题的,因为cmd不会评估参数(在PowerShell中),并且不会扩展等效的新行,它们会按字面传递。
如果我们仍然让PowerShell使用-Command
代替这样做,问题就可以解决了:
powershell -nologo -command "./test.ps1 ""a=foo `n b=bar `n c=moo"""
很难看:我们必须将命令中的每个内部"
加倍。但它的确有效。 (该命令可以由几个参数定义;我只想使用一个参数:这种方式对我来说更简单。)
答案 1 :(得分:0)
使用单引号将参数传递给powershell,使用如下脚本:
C:\some\path>powershell .\test.ps1 'a=foo' 'b=bar' 'c=moo'