Win2008下用PowerShell 2安装MSI包:让脚本等待安装完成
让PowerShell脚本等待msiexec安装完成并解决参数问题
初始需求
在Windows Server 2008环境中,使用PowerShell 2.0脚本执行以下msiexec命令安装MSI包,脚本可正常运行,但需要实现等待msiexec安装完成后再执行后续指令:
(...) msiexec.exe /norestart /qn /passive ` /l*v "$Dir\Install.log" ` /i "$dirTemp\$msi" ` INSTALLFOLDER="$Dir" (...)
尝试Start-Process方案(20220909 更新)
按照建议使用Start-Process命令并添加-Wait参数来实现等待,代码如下:
$Dir = "c:\test" $dirTemp = $env:TEMP $msi = "package.msi" $proxy = "1.2.3.4" $metadata = "value" $argList = @('/norestart', '/qn', '/passive', '/l*v', "$Dir\Install.log", '/i', "$dirTemp\$msi", "INSTALLFOLDER='$Dir'", "LOGFILE='$Dir\Agent.log'", "SERVER='$proxy'", "BUFFERFILE='$Dir\Agent.db'", "METADATA='windows $metadata'") Start-Process msiexec.exe -ArgumentList "$argList" -Wait -PassThru
但运行后出现问题:Windows Installer启动失败,仅弹出msiexec帮助窗口,指定目录无日志生成。
问题原因与解决方法(20220910 更新)
问题出在带空格的参数值上,msiexec不接受用单引号包裹带空格的参数值,需要将对应参数改为转义双引号包裹:
"METADATA=`"windows $metadata`""
修改后,msiexec就能正确识别带空格的参数值,安装流程可正常执行,同时Start-Process的-Wait参数会让PowerShell等待安装完成后再继续后续指令。
内容的提问来源于stack exchange,提问作者markfree
相关产品推荐
相关产品推荐

