Проблема с запуском EXE из PowerShell - PullRequest
1 голос
/ 20 сентября 2019

В настоящее время я работаю над созданием нового автоматизированного сценария PowerShell для обновления программного обеспечения нашего агента RMM на компьютерах.Сценарий PS разработан как отступление от встроенной автоматизации.

При создании параметров файла .exe он работает в новой строке PowerShell, но завершается ошибкой при вызове через сценарий.

Выполнение команды как явной команды из PowerShell работает нормально.Не работает при вызове с двумя строками.

My PS Параметры:

param (
    [string] $cust,
    [string] $name,
    [switch] $client,
    [switch] $server,
    [switch] $noprobe,
    [switch] $custom
)

Важные переменные:

$NETLOGON = $env:LOGONSERVER
$agentInstall = $NETLOGON+"\NETLOGON\Agent\WindowsAgentSetup.exe"

Команда, вызывающая установку:

$agentParams = "/s --% /v"CUSTOMERID=$cust CUSTOMERNAME=$name SERVERPROTOCOL=HTTPS SERVERADDRESS=domain.com SERVERPORT=443""
& $agentInstall $agentParams

Он запускает EXE, но ничего не происходит (например, синтаксис был неправильным).Нет журналов или каких-либо выводов о том, почему это не удается.

Если я запусту команду следующим образом:

\\SERVER\NETLOGON\Agent\WindowsAgentSetup.exe /s --% /v"CUSTOMERID=100 CUSTOMERNAME=\"Customer One\" SERVERPROTOCOL=HTTPS SERVERADDRESS=domain.com SERVERPORT=443"

Никаких проблем.

Любой совет будетоценил, но я предполагаю, что это проблема синтаксиса.--% требуется для правильного анализа.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Параметр --% полностью отключает синтаксический анализ, т. Е. PowerShell возьмет оставшуюся часть командной строки и передаст ее как есть.Переменные PowerShell после --% НЕ будут расширены.Кроме того, вы не можете помещать неэкранированные двойные кавычки в строку с двойными кавычками.

Определить параметры как массив, экранировать двойные кавычки вокруг аргумента второго параметра с помощью обратных кавычек и splat список параметров по команде:

$agentParams = '/s', "/v`"CUSTOMERID=$cust CUSTOMERNAME=$name SERVERPROTOCOL=HTTPS SERVERADDRESS=domain.com SERVERPORT=443`""
& $agentInstall @agentParams
0 голосов
/ 20 сентября 2019

Немного повозившись, и благодаря Ansgar Wiechers я обнаружил, что использование --% работает, но когда-то определено как отдельный параметр в массиве.

Итак, рабочий код теперь:

$agentParams = '/s', '--%', "/v'"CUSTOMERID=$cust CUSTOMERNAME=$name SERVERPROTOCOL=HTTPS SERVERADDRESS=domain.com SERVERPORT=443'""
& $agentInstall @agentParams
...