Ответ 1
Я бы обернул это в Start-Process и использовал свойство ExitCode для результирующего объекта процесса. Например
(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
С BAT/CMD
script Я могу просто использовать "msiexec /i <whatever.msi> /quiet /norestart"
, а затем проверить %errorlevel%
для результата.
С помощью VBScript
, используя метод Wscript.Shell
object Run()
, я могу получить результат следующим образом:
"result = oShell.Run("msiexec /i ...", 1, True)"
Как я могу сделать это с помощью PowerShell?
Я бы обернул это в Start-Process и использовал свойство ExitCode для результирующего объекта процесса. Например
(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
$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