2016-11-02 2 views
0

Alles, was ich zu tun versuche, ist eine Batch-Datei in Remote-Maschinen als Job auszuführen. Ich habe Batch-Datei in allen Maschinen innerhalb C:\Users\temp Ordner. Hier ist meine
Code $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 }Ausführen von Batch-Datei auf den Remote-Computern mit Powershell als Hintergrundjob

aber ich halte

Der Ausdruck nach dem '&' in einem Pipeline-Element immer erzeugt ein Objekt, das nicht gültig war. Es muss in einem Befehlsnamen führen, ein Skript Block oder ein CommandInfo Objekt

ich ohne Erfolg auch $using:batFile innerhalb Script versucht mit. Kann mir jemand vorschlagen, was ich falsch machen könnte? Ich verwende Powershell Version 4.

+0

Ich kann es nicht reproduzieren, es funktioniert für mich eine .bat auf meiner Lok aufrufen al computer 'Aufruf-Befehl -ComputerName localhost -ScriptBlock {param ($ bat) & cmd.exe/c" d: \ $ bat "} -ArgumentList 't.bat' -AsJob' und es funktioniert mit' & $ bat' und mit 'cmd $ bat' Variationen. Was ist, wenn Sie '-ScriptBlock {param ($ batFile) cmd.exe/c" C: \ Benutzer \ temp \ $ batFile "}} ohne die' & '? – TessellatingHeckler

+0

Dieses Thema macht mich verrückt. Gibt es eine Alternative zur Verwendung von invoke-command? Wenn ich den Job starte, sehe ich das Problem nicht, aber wenn ich den Computernamen innerhalb des Skriptblocks übergebe, denkt die Batchdatei, dass ich den Computernamen als Parameter an die Batchdatei übergebe ... Start-Job -ScriptBlock {cd "C : \ Benutzer \ Temp "; cmd.exe/c; & "C: \ Benutzer \ temp \ test.bat" -ComputerName $ machineName} –

+0

Noch einmal, was ist, wenn Sie '-ScriptBlock {param ($ batFile) cmd.exe/c" C: \ Benutzer \ temp \ $ batFile " } 'ohne das &? Welchen Ausdruck erhalten Sie nach '&', was zu einem Fehler führt? – TessellatingHeckler

Antwort

0

auf, dass eine Spur tun,

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 

und Versuchen Invoke-Expression als Behelfslösung statt &

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

Grüße Verwendung

Kvprasoon

Verwandte Themen