Получить сообщение об ошибке из функции на сценарии powershell - PullRequest
0 голосов
/ 24 апреля 2020

Я не совсем уверен, как объяснить мою проблему, но у меня есть функция, которая устанавливает Office, представьте себе, что человек, который запускает этот скрипт, не имеет соединения rnet или не имеет достаточно места на своем жестком диске. У меня есть файл XML, чтобы скрыть интерфейс настройки, чтобы пользователь не мог видеть процесс установки. Просто чтобы быть понятным, весь мой код работает нормально, просто хочу добавить эту функцию, чтобы, если что-то пойдет не так, пока пользователь запускает сценарий, который я знаю, где была ошибка.

Это моя функция:

Function Install-Office365OfficeProducts{
    Write-Host ""
    Start-Sleep -Seconds 5
    Write-Host "Installing Office 365 ProPlus..."
    # Installing Office 365 ProPlus
    Install-Office365Product -path "$PSScriptRoot\setup.exe" -xmlPath "$PSScriptRoot\InstallO365.xml"

Это то, что я пробовал:

if (Install-Office365OfficeProducts -eq 0) {
Write-Host "FAILED"}

Я очень запутался, я думал, что функция, которая работает без error возвращает 1, а при запуске с ошибками возвращает 0.

Также попытался поместить код следующим образом:

try {
    Install-Office365Product -path "$PSScriptRoot\setup.exe" -xmlPath "$PSScriptRoot\InstallO365.xml"
} catch {
    Write-Host "Failed!"
}

РЕДАКТИРОВАТЬ:

В основном я хочу, чтобы мне показывали ошибку, если Office установка не завершена ...

@ Томас

Function Install-Office365Product{
    Param (
        [string]$path,
        [string]$xmlPath
    )

    $arguments = "/configure `"$xmlPath`""
    try{
        Start-Process -FilePath "$path" -ArgumentList "$arguments" -Wait -NoNewWindow -ErrorAction Stop
    }catch{
        Write-Host "It was not possible to install the product!"
    }
}

1 Ответ

0 голосов
/ 26 апреля 2020

Ваш try / catch -блок внутри Install-Office365OfficeProducts бесполезен, потому что Install-Office365Product ничего не сгенерирует, если вы не передадите неверные аргументы. try / catch -блок внутри Install-Office365Product, скорее всего, также ничего не поймает. Но вы, конечно, можете оценить код возврата вашего установщика, вызванный с помощью Start-Process:

function Install-Office365Product {
    Param (
        [string]$path,
        [string]$xmlPath
    )

    $arguments = "/configure `"$xmlPath`""
    $process = Start-Process -FilePath "$path" -ArgumentList "$arguments" -Wait -PassThru -NoNewWindow
    if ($process.ExitCode -eq 0) {
        Write-Host "Installation successful"
    } else {
        Write-Host "Installation failed"
    }
}

Вместо записи в stdout, вы, конечно, также можете вызвать исключение и обработать его позже в более высоком функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...