Вызов удаленного .exe на сервере со списком аргументов - PullRequest
0 голосов
/ 11 февраля 2019

Я довольно новичок в PowerShell и надеюсь задать вопрос о команде, которую пытаюсь запустить.

Я прочитал и прочитал все, что могу найти по этому поводу, поэтому извинения взаранее, если я спрашиваю о невозможном или о чем-то немом.

Из командной строки Windows на удаленном компьютере я могу выполнить следующую команду;'c:\config-files\app.exe foo /o /last' exe генерирует выходной файл, читая файлы foo, и сохраняет его как foo.txt.

app.exe не существует в каталоге c: \ config-files при запускеэто на компьютере app.exe находится в локальном пути env в c: \ main-app.

- Выше приведен один из ключевых моментов, который был рассмотрен в ответах ниже.

Я попытался добавить путь к exe, ноэто, кажется, игнорируется при выполнении следующего:

path='c:\main-app\'
& Invoke-Command -ComputerName foo -ScriptBlock { & cmd.exe /c "c:\config-files\app" } -ArguementList 'foo', '/last', '/o'

Выше не удается.(очевидно, некоторым!)

Если я запускаю;

Invoke-Command foo  -ScriptBlock {& cmd.exe /c "c:\main-app\app" }

Приложение запускается в окне PowerShell, я просто не могу отправить Аргументы в приложение.

Invoke-Command -Computername foo -ScriptBlock {param ($myarg) "cmd.exe /c c:\main-app\app" $myarg } -ArgumentList 'foo', '/last', '/o'

Это наиболее близкий мне вариант, но он читает только один аргумент, и он вызывается из папки документов и настроек пользователя, пытающегося выполнить команду, а не из этого пути двоичного файла.

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

Заранее спасибо за ваше время.

1 Ответ

0 голосов
/ 11 февраля 2019
  • Вам не нужно cmd /c для вызова консольного приложения (или любой внешней программы).

  • Для доступа к аргументам, переданным в блок скрипта изв сценарии либо используйте автоматический массив $Args, либо объявите параметры явно (как вы пытались использовать single параметр).

  • Вы можете использоватьмассив непосредственно для передачи его элементов в качестве отдельных аргументов во внешнюю программу.

Invoke-Command -Computername foo -ScriptBlock { 
  c:\main-app\app $Args  # invoke app.exe, passing arguments through
} -ArgumentList 'foo', '/last', '/o'

Кроме того, вы упоминаете о желании интерпретировать аргументы, которые являются путями к файлам, относительно каталога, в котором приложениерасположен;самое простое решение - сначала использовать команду Set-Location:

Invoke-Command -Computername foo -ScriptBlock { 
  Set-Location c:\main-app
  .\app $Args 
} -ArgumentList 'foo', '/last', '/o'
...