Как проверить, выполнена ли команда powershell успешно или нет?

Можно ли проверить, выполнена ли команда powershell успешно или нет?

Пример:

Set-CASMailbox -Identity: blocks.5 -OWAMailboxPolicy "DoNotExists"

вызвала ошибку:

Outlook Web App mailbox policy "DoNotExists" wasn't found. Make sure you typed the policy name correctly.
    + CategoryInfo          : NotSpecified: (0:Int32) [Set-CASMailbox], ManagementObjectNotFoundException
    + FullyQualifiedErrorId : 9C5D12D1,Microsoft.Exchange.Management.RecipientTasks.SetCASMailbox

Я думаю, что должна быть возможность получить FullyQualifiedErrorId, поэтому я попробовал следующее:

$ test = Set-CASMailbox -Identity: blocks.5 -OWAMailboxPolicy "DoNotExists"

Но похоже, что ошибка не передается в тестовую переменную.

Итак, как здесь правильно выполнить что-то вроде:

$test = Set-CASMailbox -Identity:blocks.5 -OWAMailboxPolicy "DoNotExists"
if ($test -eq "error")
{
Write-Host "The Set-CASMailbox command failed"
}
else
{
Write-Host "The Set-CASMailbox command completed correctly"
}
2
задан 14 July 2017 в 00:29
2 ответа

Чтение Set-CASMailbox ссылка :

  • Параметр OwaMailboxPolicy :

Параметр OwaMailboxPolicy указывает Outlook на паутина политика почтового ящика для почтового ящика. Вы можете использовать любое значение, которое однозначно определяет политику почтовых ящиков Outlook в Интернете. Например:

  • Имя
  • Отличительное имя (DN)
  • GUID

Имя по умолчанию для Outlook в политике веб-почтовых ящиков - По умолчанию.

Прочтите about_CommonParameters ( параметры, которые могут использоваться с любым командлетом ), примените либо ErrorVariable , либо ErrorAction :

ErrorVariable :

Set-CASMailbox -Identity:blocks.5 -OWAMailboxPolicy "DoNotExists" -ErrorVariable test
if ($test.Count -neq 0)      ### $test.GetType() is always ArrayList
{
    Write-Host "The Set-CASMailbox command failed: $test"
}
else
{
    Write-Host "The Set-CASMailbox command completed correctly"
}

ErrorAction и Попробуйте, поймайте, наконец (прочтите about_Try_Catch_Finally , как использовать блоки Try, Catch и finally для обработки завершающих ошибок ):

try {
    Set-CASMailbox -Identity:blocks.5 -OWAMailboxPolicy "DoNotExists"  -ErrorAction Stop
                ### set action preference to force terminating error:  ↑↑↑↑↑↑↑↑↑↑↑↑ ↑↑↑↑
    Write-Host "The Set-CASMailbox command completed correctly"
}  
catch {
    Write-Host "The Set-CASMailbox command failed: $($error[0])"  -ForegroundColor Red
}

В любом В этом случае прочтите Запись на хост считается вредоносным .

1
ответ дан 3 December 2019 в 12:35

В дополнение к ответу JosefZ автоматическая переменная $Error содержит массив ошибок, так что вы можете посмотреть свойство $Error.Count, чтобы увидеть, увеличилось ли оно. Я думаю, что -ErrorVariable — лучший ответ. подробности см. в Get-Help about_AutomaticVariables.

0
ответ дан 31 May 2020 в 21:07

Теги

Похожие вопросы