2010-11-26 93 views
2

我在使用可变数量参数的脚本运行powershell时遇到问题。如何从命令行将字符串参数传递给Powershell for ConvertFrom-StringData?

脚本文件是这样的:

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

-File的方法是有问题的,因为该参数不是由cmd评估(在PowerShell中)并且新行等价物不扩展,它们按照字面传递。

powershell -nologo -command "./test.ps1 ""a=foo `n b=bar `n c=moo""" 

这是丑陋的:我们必须在每一个命令内"翻一番

问题可如果我们还是让PowerShell来做到这一点通过使用-Command,而不是来解决。但它的工作。 (该命令可以通过多个参数来定义;我只是喜欢使用单个参数:这种方式对我来说看起来更简单)。

+2

感谢罗马,那工作。只是另一件事的附录:我有一个脚本的第二个参数,其中包含一个字面应该从字面上使用的字符串。使用“”param1“”“”a = foo`n b = bar`n c = moo“”导致两个字符串被连接在一起。我必须使用'param1'“”a = foo`n b = bar`n c = moo“”才能使其按预期工作。 – 2010-11-26 12:54:26

0

使用单引号来传递参数与脚本的PowerShell是这样的:

C:\some\path>powershell .\test.ps1 'a=foo' 'b=bar' 'c=moo' 
相关问题