2010-11-26 92 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' 
相關問題