【发布时间】:2021-07-09 06:41:39
【问题描述】:
我正在尝试通过 msiexec 开始安装。 以下参数可用,如果我以这种方式使用它,安装将是正确的。 这是来自供应商的示例:
msiexec.exe /i ApexOne.msi MyServer="win2016-x64:8080|4343" MyDomain="Workgroup\Subdomain" /Lv+ "c:\temp\MSI.log"
这是我的代码:
Start-Process -FilePath "$env:systemroot\system32\msiexec.exe" -ArgumentList @('/i ".\agent.msi" MyServer="servername:8080|4344" MyDomain="999-Test"') -wait
但为了自动化,我必须使用变量 $domain 来生成正确的域。 我尝试了不同的代码,但没有任何帮助:
这是我的变量 $domain 的代码
$domain='999-Test'
示例:
Start-Process -FilePath "$env:systemroot\system32\msiexec.exe" -ArgumentList @('/i ".\agent.msi" MyServer="servername:8080|4344" MyDomain=**"$domain"'**) -wait
我也试过了,但我不知道如何解决这个故障。 我认为变量的解释是错误的,但我无法修复它。
-ArgumentList @('/i ".\agent.msi"','MyServer="servername:8080|4344"','MyDomain='$domain'')
也许有人可以帮我解决这个错误?
【问题讨论】:
-
单引号将字符串视为文字字符串而不进行插值(变量和表达式替换)。您需要将外部
'替换为"- 所以"MyDomain='$domain'"。请注意,如果有任何双引号inside,您还需要使用反引号转义字符串(例如"MyDomain=`"$domain`"")。 -
我用过这个,但是不行:
@('/i ".\agent.msi" MyServer="servername:8080|4344" MyDomain=`"$domain`"') -wait -
有了这个安装没有开始,缺少终止符
'。我:所以我尝试了这个:``Start-Process -FilePath "$env:systemroot\system32\msiexec.exe" -ArgumentList @('/i ".\agent_vorlage.msi" MyServer="av01.badencloud.de: 8080|4344" "MyDomain="$domain""') -wait``` -
您在混合和错误匹配单引号和双引号 - 这是行不通的。试试
-ArgumentList @("/i `".\agent_vorlage.msi`" MyServer=`"av01.badencloud.de:8080|4344`" MyDomain=`"$domain`"")。整个字符串被双引号"包围,引号 inside 被backtick double-quote转义 - 即 `" -
今天略读一下,maybe have a look here。
标签: powershell windows-installer