use*_*477 7 powershell powershell-3.0
我使用静默安装命令来安装软件.我从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
Run Code Online (Sandbox Code Playgroud)
这将运行安装软件的命令,但它不会等待它完成并继续执行下一行代码.我想控制安装,以便我知道它是否已经完成.
如何获取Invoke-Expression cmdlet 的错误代码,以便我可以了解cmd是否成功执行?
And*_*ndi 20
这取决于EXE文件的运行方式 - 有时它会启动一个单独的进程并立即返回,在这种情况下,这通常有效 -
$p = Start-Process -FilePath <path> -ArgumentList <args> -Wait -NoNewWindow -PassThru
$p.ExitCode
Run Code Online (Sandbox Code Playgroud)
否则这通常有效 -
& <path> <args>
$LASTEXITCODE
Run Code Online (Sandbox Code Playgroud)
或者有时这个 -
& cmd.exe /c <path> <args>
$LASTEXITCODE
Run Code Online (Sandbox Code Playgroud)
您似乎正在运行 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23084 次 |
| 最近记录: |