PowerShell调用Java MSI静默安装并等待执行完成报错问题咨询
报错原因
你之前的Start-Process写法参数结构错误:/QN、TRANSFORMS等是传递给msiexec.exe的运行参数,必须统一归入Start-Process的-ArgumentList参数内,不能直接散写在命令中,否则PowerShell会将这些内容识别为Start-Process本身的参数,自然会抛出「找不到对应位置参数」的异常。
另外直接调用msiexec.exe不会等待安装完成的原因是该程序会直接拉起后台安装子进程,主进程会快速退出,PowerShell默认仅等待主进程执行结束,所以才会直接运行后续代码。
正确实现代码
方案1:数组传参(推荐,路径含空格也不会出错)
# 提前定义路径,后续维护更方便 $installMsi = "C:\MagtekCC\Files\Java\jre1.8.0_144.msi" $transformFile = "jre1.8.0_144.mst" $logOutput = "C:\Temp\msilog.log" Start-Process -FilePath msiexec.exe -ArgumentList @( "/i", "`"$installMsi`"", "/QN", "TRANSFORMS=`"$transformFile`"", "/L*V", "`"$logOutput`"" ) -Wait -NoNewWindow # 后续代码 Write-Host -NoNewLine "Done.`n" -ForegroundColor Cyan Start-Sleep -s 2
如果运行时提示权限不足,在Start-Process的参数中添加-Verb RunAs即可自动提权运行安装程序。
方案2:字符串传参(简化写法)
Start-Process msiexec.exe -ArgumentList "/i `"C:\MagtekCC\Files\Java\jre1.8.0_144.msi`" /QN TRANSFORMS=`"jre1.8.0_144.mst`" /L*V `"C:\Temp\msilog.log`"" -Wait Write-Host -NoNewLine "Done.`n" -ForegroundColor Cyan Start-Sleep -s 2
内容的提问来源于stack exchange,提问作者user14029480
相关产品推荐
相关产品推荐

