从PowerShell运行EXE的问题

时间:2019-09-20 10:02:45

标签: powershell executable

我目前正在创建一个新的自动化PowerShell脚本,以更新计算机上的RMM代理软件。 PS脚本旨在作为内置自动化的后备。

在创建.exe文件的参数时,它可以在新的PowerShell行上运行,但是在通过脚本调用时失败。

将命令作为PowerShell的显式命令运行即可。使用两个字符串调用时不起作用。

我的PS参数:

sheet1.showSheet();
sheet2.hideSheet();

重要变量:

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

调用安装的命令:

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

它确实运行EXE,但是没有任何反应(例如语法错误)。没有日志或任何有关失败原因的输出。

如果我按以下方式运行命令:

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

没问题。

任何建议都将不胜感激,但我猜测这是一个语法问题。 \\SERVER\NETLOGON\Agent\WindowsAgentSetup.exe /s --% /v"CUSTOMERID=100 CUSTOMERNAME=\"Customer One\" SERVERPROTOCOL=HTTPS SERVERADDRESS=domain.com SERVERPORT=443" 必须正确解析。

2 个答案:

答案 0 :(得分:1)

参数--%完全禁用解析,即PowerShell将采用命令行的其余部分并按原样传递。 --%之后的PowerShell变量将不会扩展。另外,您不能将未转义的双引号放在双引号字符串中。

将参数定义为数组,用反引号将第二个参数的参数周围的双引号引起来,并在命令上的参数列表中splat

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

答案 1 :(得分:0)

有一点点修改,并且感谢Ansgar Wiechers,我发现使用--%可以工作,但是一旦被定义为数组中的单独参数。

现在,工作代码为:

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