Все, что я пытаюсь сделать, это выполнить командный файл на удаленных машинах в качестве задания. У меня есть командный файл, расположенный на всех машинах внутри папки 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.
Я не могу воспроизвести его, он работает для меня, ссылаясь на .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
Эта проблема сводит меня с ума. Есть ли альтернатива использованию команды invoke? Если я начинаю работу, я не вижу проблемы, но когда я передаю имя пользователя в скриптблоке, пакетный файл считает, что передаю имя_компьютера в качестве параметра в пакетный файл ... Start-Job -ScriptBlock {cd "C : \ Users \ temp "; cmd.exe/c; & "C: \ Users \ temp \ test.bat" -ComputerName $ machineName} –
Опять же, что делать, если вы делаете '-ScriptBlock {param ($ batFile) cmd.exe/c" C: \ Users \ temp \ $ batFile " } 'без &? Какое выражение вы получаете после '&', что приводит к ошибке? – TessellatingHeckler