2016-11-02 54 views
0

所有我試圖做的是執行到遠程機器的批處理文件作爲一個工作。我執行批處理文件在遠程機器有位於所有機器內部C:\Users\temp folder.Here批處理文件是我的代碼
$batFile = "test.bat" foreach($m in $machine) { Invoke-Command -ComputerName $m -ScriptBlock{param($batFile) & cmd.exe /c "C:\Users\temp\$batFile"} -Authentication negotiate -Credential $cred -ArgumentList $batFile -AsJob }使用PowerShell作爲後臺作業

但我保持在一個管道元件得到

後「&」的表達所產生的對象的無效。它必須產生一個命令名稱,腳本 塊,或CommandInfo的對象

我使用$using:batFile內部腳本塊也沒有成功嘗試。任何人都可以向我建議我可能做錯了什麼?我使用PowerShell的版本4

+0

我無法複製它,它適用於我在我的loc上調用.bat人計算機'調用命令-ComputerName本地主機-ScriptBlock {PARAM($蝙蝠)的cmd.exe/C 「d:\ $球棒」} -ArgumentList 't.bat' -AsJob'和它的工作原理與'&$ bat'和'cmd $ bat'的變化。如果你做了'-ScriptBlock {param($ batFile)cmd.exe/c「C:\ Users \ temp \ $ batFile」}'沒有'&'怎麼辦? – TessellatingHeckler

+0

這個問題讓我瘋狂。有使用invoke-command的其他選擇嗎?如果我開始工作,但沒有看到問題,但是當我在腳本塊中傳遞計算機名時,批處理文件認爲我將計算機名作爲參數傳遞給批處理文件... Start-Job -ScriptBlock {cd「C :\ Users \ temp「; cmd.exe/c; & 「C:\用戶\ TEMP \ test.bat的」 -ComputerName $ MACHINENAME} –

+0

同樣,如果你做'{-ScriptBlock參數($ batFile)的cmd.exe/c 「C:\用戶\ TEMP \ $ batFile」 }'沒有&?你在'&'之後得到了什麼樣的表達? – TessellatingHeckler

回答

0

做一個跟蹤,

Invoke-Command -ComputerName $m -ScriptBlock{param($batFile) Trace-Command NativeCommandParameterBinder -Expression { & cmd.exe /c "C:\Users\temp\$batFile"}} -Authentication negotiate -Credential $cred -ArgumentList $batFile -AsJob 

,並使用Invoke-Expression作爲一種解決方法,而不是&

invoke-Expression "cmd.exe /c 'C:\Users\temp\$batFile'" 

問候嘗試,

Kvprasoon