我正在使用无提示安装命令来安装软件。我正在从PowerShell 3.0运行此命令。
$silentInstall = C:\Users\Admin\Documents\Setup-2.0.exe exe /s /v"EULAACCEPTED=\"Yes\" /l*v c:\install.log /qn"
Invoke-Expression $silentInstall
这将运行安装软件的命令,但它不会等待其完成,而是继续执行下一行代码。我想控制安装,以便知道安装是否完成。
如何获得Invoke-Expression cmdlet的错误代码,以便我可以知道cmd是否成功执行?
最佳答案
看来您正在运行MSI安装程序。从控制台运行时,MSI将派生一个新进程以运行安装程序时,将立即返回控制权。无法更改此行为。
您可能需要做的是使用Get-Process
查找名为msiexec
的进程,并等待其完成。总是有一个msiexec
进程正在运行,该进程处理启动新的安装程序,因此您需要找到在安装开始后开始的msiexec
进程。
$msiexecd = Get-Process -Name 'msiexec'
C:\Users\Admin\Documents\Setup-2.0.exe exe `
/s `
/v"EULAACCEPTED=\"Yes\" /l*v c:\install.log /qn"
$myMsi = Get-Process -Name 'msiexec' |
Where-Object { $_.Id -ne $msiexecd.Id }
$myMsi.WaitForExit()
Write-Verbose $myMsi.ExitCode