2013-06-05 38 views
1

我有一個簡單的問題。我想一個命令分配給一個變量,並有額外的參數來執行,如:電源外殼:一個命令作爲參數的變量

C:\test.exe /q /v 

但是當我做:

$path=C:\test.exe 
$path /q /v 

它不工作..任何想法?

+0

你可以說錯誤是什麼,它如何工作? – Stoleg

+0

這是一個語法錯誤,或者我的命令在沒有參數的情況下啓動,所以當我運行$ path/q/v時,PS會運行$ path。 – Sam

回答

2

命令字符串:

隨着調用,表達cmdlet時,執行任意的字符串作爲一段代碼。它接受字符串,編譯它並執行它。

所以你做的事:

$path='C:\test.exe'; 
Invoke-Expression "$path /q /v"; 

作爲一個方面說明:當你做$path=C:\test.exe不帶引號,你實際上是分配的test.exe標準輸出到變量$path。你必須向PowerShell表明它實際上是一個你希望稍後執行的字符串。


命令腳本對象:

如果您關心性能,你也可以嘗試你的命令轉換爲編譯腳本塊,並與&電話運營商執行。

$path='C:\test.exe'; 
$cmd = [scriptblock]::Create("$path /q /v"); 
& $cmd; 
+0

謝謝你們,它的作品:) – Sam

3

最經典的方式做到這一點是使用電話運營商在包含命令例如「名稱」變量:

& $path /q /v 

這實際上需要時路徑命令(即本機exe)包含空格。

+0

這是最好的方式,恕我直言。 – nabrond