Запустите MsiExec из PowerShell и получите код возврата - PullRequest
28 голосов
/ 08 ноября 2010

С помощью скрипта BAT/CMD я могу просто использовать "msiexec /i <whatever.msi> /quiet /norestart", а затем проверить %errorlevel% для результата.

С VBScript, используя метод Wscript.Shell object Run(), я могурезультат, подобный следующему:

"result = oShell.Run("msiexec /i ...", 1, True)"

Как я могу сделать это с PowerShell?

Ответы [ 3 ]

50 голосов
/ 10 ноября 2010

Я бы обернул это в Start-Process и использовал бы свойство ExitCode результирующего объекта процесса. Например

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
18 голосов
/ 08 ноября 2010
$LastExitCode

или

$?

в зависимости от того, что вы после. Первый является целым числом, последний просто логическим. Кроме того, $LastExitCode заполняется только для запуска собственных программ, тогда как $? обычно сообщает, был ли последний запуск команды успешным или нет - поэтому он также будет установлен для командлетов.

PS Home:\> cmd /c "echo foo"; $?,$LASTEXITCODE
foo
True
0
PS Home:\> cmd /c "ech foo"; $?,$LASTEXITCODE
'ech' is not recognized as an internal or external command,
operable program or batch file.
False
1
0 голосов
/ 06 ноября 2018

Вы также можете использовать комплект развертывания приложения powershell, который предоставляет несколько вещей.

Затем вы можете использовать, например,

Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"

info http://psappdeploytoolkit.com/

...