2010-11-26 27 views
2

可変数のパラメータを使用するスクリプトでPowerShellを実行する際に問題があります。コマンドラインからConvertFrom-StringDataの文字列パラメータをPowershellに渡すにはどうすればよいですか?

スクリプトファイルは次のようになります。同じスクリプトとパラメータを持つコマンドラインからPowerShellを呼び出す

[PS] C:\some\path>.\test.ps1 "a=foo `n b=bar `n c=moo" 

Name       Value 
----       ----- 
c        moo 
a        foo 
b        bar 

がこれを示しています

PowerShellでスクリプトを直接実行
param([string]$paramString) 

$params = ConvertFrom-StringData $paramString 
$params 

は、期待される結果が得られ:

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が代わりに-Commandを使用していることを行うことを許可すれば

問題が解決することができます。

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

それは醜いです:私たちは、コマンド内のすべての内部"を倍増する必要があります。しかし、それは動作します。 (このコマンドはいくつかのパラメータで定義することができ、私はただ一つのパラメータを使うほうが好きです。

+2

働いたおかげで、ローマ、。別のことのためのちょっとした補遺:文字通り使うべき文字列を含んだスクリプトの第2のパラメータがありました。 "" param1 "" "" a = foo 'n b = bar' n c = moo ""を使用すると、両方の文字列が連結されました。私は 'param1' "" a = foo 'n b = bar' n c = moo ""を使用して意図したとおりに動作させる必要がありました。 –

+2

ええと... cmdからの複雑なパラメータを持つPowerShellスクリプトを呼び出すのは苦労します。設計時にスクリプトがcmdからの呼び出し用であることが分かっている場合、その入力インタフェースはできるだけ簡単に設計する必要があります。このアドバイスも考慮してください。なぜなら、 '-Command'のアプローチは' -File'アプローチのすべてのユースケースをカバーしていないからです。 –

0

使用このようなスクリプトをPowerShellのためにパラメータを渡すために、単一引用符:

C:\some\path>powershell .\test.ps1 'a=foo' 'b=bar' 'c=moo' 
関連する問題