2013-07-30 73 views
1

我試圖用PowerShell執行一個.exe文件不執行這樣做:腳本塊在PowerShell中

$myExe = Join-Path $scriptDir "\bin\my\myProgram.exe" 
$job = Start-Job -ScriptBlock{ 
     & $myExe } 

但不執行。當輸入$myExe中的文件路徑時,該程序按預期工作,但是當我使用上述代碼時,什麼都不會發生。有人能解釋我做錯了什麼嗎?或者,爲什麼我沒有得到預期的結果?

要清楚,預期的結果(在這一點上)是獲得防火牆警告。同樣,當我直接鍵入PS控制檯的路徑時,防火牆警告出現,但使用上面的代碼,似乎沒有任何事情發生。我也嘗試使用Get-Process檢查狀態,但結果是$job變量,表示它是running

UPDATE:

運行:

$myExe = Join-Path $scriptDir "\bin\my\myProgram.exe" 
& $prndExe 

原因PowerShell來掛

更新2:

當我這樣做時,該程序的工作原理及過程開始:

Start-Job -ScriptBlock{ & "C:\path\Music\source\p\android\test\Automation\bin\mym\myProgram.exe"} 

但是使用上面的代碼沒有。這讓我相信我在Start-Job cmdlet上做錯了什麼?

+0

你調試[$ myExe],以確保完整的路徑是正確的?另外,Start-Job是用於後臺進程的。這應該是一個後臺進程? – TheOptimusPrimus

+0

因此&$ myExe在開始工作腳本塊之外工作? – Jimbo

+0

$ myExe在Start-Job中的用途是什麼?這是一條有效的路徑嗎?你證實了嗎? – TheOptimusPrimus

回答

1

所以這個問題的解決方案(不在文檔中列出的,應該是)是,如果你在ScriptBlock內使用變量,你必須使用ArgumentList並傳入這些變量。

所以讓我的腳本塊的工作,我所做的:

$job = Start-Job -ScriptBlock{ 
    $myExe = $args[0] 

    & $myExe 
} -ArgumentList @($myExe) 
+0

我很困惑......第一行將** $ myExe **設置爲一個exe文件的路徑('$ myExe = Join-Path $ scriptDir「\ bin \ my \ myProgram.exe」'),而你的整個腳本塊是'&$ myExe' ...所以變量在哪裏? –

+0

這是我的觀點。當我設置'$ myExe'時,它被設置在腳本塊之外,所以爲了讓我使用它,我必須將它作爲參數傳入。不要問我爲什麼,但它是如何工作的。 – BlackHatSamurai

+1

您必須將它作爲參數傳遞,因爲作業運行在不同的進程中。變量在那裏不存在。 – x0n