如何从命令行将字符串参数传递给Powershell for ConvertFrom-StringData?

时间:2010-11-26 09:45:18

标签: powershell

我在使用应该使用可变数量参数的脚本运行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函数无法解析它。

2 个答案:

答案 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'