我目前正在创建一个新的自动化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"
必须正确解析。
答案 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