Подтвердить что ты не робот

Powershell Выполнять удаленный exe с аргументами командной строки на удаленном компьютере

Я искал все и пробовал разные варианты команд, но я все еще не там.

Моя цель - запустить exe, который уже находится на удаленном компьютере, и передать аргументы командной строки. Я пробовал команду invoke-command, но я не могу заставить свой синтаксис распознавать аргументы.

Проверенные методы:

  • Win32_Process.Create()
  • Invoke-Command
  • Запуск процесса
  • [diagnostics.process]:: старт
  • Invoke-WmiMethod

Из моих тестов наиболее близким я могу получить следующую команду:

$command = "program.exe -r param"
Invoke-Command -ComputerName $server -ScriptBlock {$command}

Команда завершается без кода ошибки или возврата, но на удаленном компьютере она не запускается с аргументами. Я играл с одиночными/двойными кавычками, чтобы увидеть, есть ли какие-либо изменения, но нет.

4b9b3361

Ответ 1

Пробовал ли вы использовать параметр -ArgumentList:

invoke-command -ComputerName studio -ScriptBlock { param ( $myarg ) ping.exe $myarg } -ArgumentList localhost   

http://technet.microsoft.com/en-us/library/dd347578.aspx

Пример вызова программы, которая не находится в пути, и имеет пробел в пути к папке:

invoke-command -ComputerName Computer1 -ScriptBlock { param ($myarg) & 'C:\Program Files\program.exe' -something $myarg } -ArgumentList "myArgValue"

Если значение аргумента статично, вы можете просто предоставить его в блоке script следующим образом:

invoke-command -ComputerName Computer1 -ScriptBlock { & 'C:\Program Files\program.exe' -something "myArgValue" } 

Ответ 2

Вы пытаетесь передать аргументы командной строки программе AS, которую вы запускаете? Я сейчас что-то работаю над тем, что делает именно это, и это было намного проще, чем я думал. Если я перейду в командную строку и наберите

C:\folder\app.exe/xC:\folder\file.txt

то мое приложение запускает и создает файл в указанном каталоге с указанным именем.

Я хотел сделать это через Powershell script на удаленной машине и понял, что все, что мне нужно было сделать, было помещено

$s = New-PSSession -computername NAME -credential LOGIN
    Invoke-Command -session $s -scriptblock {C:\folder\app.exe /xC:\folder\file.txt}
Remove-PSSession $s

(У меня есть куча более похожих команд внутри сеанса, это всего лишь минимум, который требуется для запуска) заметьте пробел между исполняемым файлом и аргументами командной строки. Он работает для меня, но я точно не знаю, как работает ваше приложение, или даже если вы передаете ему аргументы.

* Я также могу заставить мое приложение вывести файл обратно на мой собственный локальный компьютер, изменив script -block на

C:\folder\app.exe /x"\\LocalPC\DATA (C)\localfolder\localfile.txt"

Вам нужны кавычки, если в вашем пути к файлу есть пробел.

EDIT: на самом деле это вызвало некоторые глупые проблемы с Powershell, которые запускали приложение как услугу или что-то в этом роде, поэтому я сделал несколько поисков и выяснил, что вы можете вызвать CMD для выполнения команд для вас на удаленном компьютере. Таким образом, команда выполняется ТОЧНО, как если бы вы только что ввели ее в окно CMD на удаленной машине. Поместите команду в скриптблоке в двойные кавычки, а затем поставьте cmd.exe/C перед ним. например:

cmd.exe /C "C:\folder\app.exe/xC:\folder\file.txt"

это решило все проблемы, которые у меня были в последнее время.

EDIT EDIT: Имел больше проблем и нашел гораздо лучший способ сделать это.

start-process -filepath C:\folder\app.exe -argumentlist "/xC:\folder\file.txt"

и это не повредит ваше окно терминала, ожидающее завершения удаленного процесса. Просто убедитесь, что у вас есть способ прекратить процесс, если он не делает этого самостоятельно. (мой не требует, требует кодирования другого аргумента)

Ответ 3

$sb = [scriptblock]::create($command)

Ответ 4

$sb = ScriptBlock::Create("$command")
Invoke-Command -ScriptBlock $sb

Это должно работать и не вводить в заблуждение новичков.