2016-11-02 5 views
0

Все, что я пытаюсь сделать, это выполнить командный файл на удаленных машинах в качестве задания. У меня есть командный файл, расположенный на всех машинах внутри папки C:\Users\temp. Вот мой код
$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 внутри ScriptBlock, а также не имели успеха. Может ли кто-нибудь предложить мне, что я могу делать неправильно? Я использую Powershell версии 4.

+0

Я не могу воспроизвести его, он работает для меня, ссылаясь на .bat на мой loc al computer 'Invoke-Command -ComputerName localhost -ScriptBlock {param ($ bat) & cmd.exe/c" d: \ $ bat "} -ArgumentList 't.bat' -AsJob' и работает с' & $ bat' и с вариациями 'cmd $ bat'. Что делать, если вы выполняете '-ScriptBlock {param ($ batFile) cmd.exe/c" C: \ Users \ temp \ $ batFile "}' без '&'? – TessellatingHeckler

+0

Эта проблема сводит меня с ума. Есть ли альтернатива использованию команды invoke? Если я начинаю работу, я не вижу проблемы, но когда я передаю имя пользователя в скриптблоке, пакетный файл считает, что передаю имя_компьютера в качестве параметра в пакетный файл ... Start-Job -ScriptBlock {cd "C : \ Users \ temp "; cmd.exe/c; & "C: \ Users \ temp \ test.bat" -ComputerName $ machineName} –

+0

Опять же, что делать, если вы делаете '-ScriptBlock {param ($ batFile) cmd.exe/c" C: \ Users \ 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