我正在使用无提示安装命令来安装软件。我正在从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

10-08 18:53