Добавьте параметр -PassThru
в Start-Process
, чтобы командлет фактически выводил объект процесса, который можно назначить переменной $install
. Код, который у вас есть, этого не делает, поэтому $install
пуст и проверка свойства ExitCode
для пустой переменной, очевидно, не будет соответствовать вашим ожиданиям. Вы также можете использовать /qn
(без пользовательского интерфейса) вместо /qb
(базовый пользовательский интерфейс) для автоматической установки.
Это должно делать то, что вы хотите:
$install = Start-Process -FilePath 'path' -ArgumentList '/qn' -Wait -PassThru
if ($install.ExitCode -eq 0) {
Write-Host "Install Successful"
} else {
Write-Host "Install Failed"
}
С учетом вышесказанного, совершенно очевидно, что код, размещенный в вашем вопросе, не дал бы вам никакого результата. должен отображать «Ошибка установки» независимо от того, была ли установка успешной или нет, поскольку при пустом значении $install
1016 * оценивается как $null -eq 0
, что, в свою очередь, равно $false
.