2014-01-15 5 views
0

Я хотел бы узнать, могу ли я получить помощь по коду ошибки. Мой последний скрипт будет устанавливать SMTP-адрес для почтового ящика, но я просто использовал этот код ниже в качестве примера.

Set-Mailbox jsmith -AntispamBypassEnabled $false 
    if ($LastExitCode -eq 1) 
    { 
    echo "Exit Code 1" $lastexitcode 
    } 
    else 
    { 
    echo "Exit Code 0" $lastexitcode 
    } 

Мое предположение, что в первый раз, когда я запускаю команду, она выполняет работу, и я получаю успешный код ошибки. Во второй раз, когда я запускаю команду, powershell возвращается со следующим.

Warning: The command completed successfully but no settings have been modified. 

Я хочу, чтобы получить код ошибки для 3 ситуаций. (Это сработало, оно потерпело неудачу, а затем одно выше, чем оно работало, но никаких изменений не было.) Я просто не могу найти никаких примеров этого и действительно ценю некоторые предложения.

Спасибо.

Майкл

Хорошо, я получил большой отклик, и теперь я использую следующий код. Мне нужно изменить тысячи объектов, и все они будут с разными кодами ошибок, поэтому мне нужно будет записать любое из условий в файл журнала. У меня есть куча переменных окружения по всему сценарию, так что в конце концов, я собираюсь поставить «User Пройдена/Failed» $ EmailAddress $ DisplayName и т.д. .....

Try { Set-Mailbox jsmith -AntispamBypassEnabled $false -ErrorAction Stop - WarningVariable Warn } 

Catch { Exit 2 } Write-Host "Exit Code 2" 

if ($Warn) { Exit 1 } Write-Host "Exit Code 1" 

else  { Exit 0 } Write-Host "Exit Code 0" 

ответ

3

Попробуйте это. Она должна выйти с 0 в случае успеха, 1 в случае успеха, но никаких изменений, и 2, если это не удалось:

Try { Set-Mailbox jsmith -AntispamBypassEnabled $false -ErrorAction Stop -WarningVariable Warn } 
    Catch { Exit 2 } 
if ($Warn) { Exit 1 } 
else  { Exit 0 } 
+0

Похоже, что он будет работать отлично, но мне трудно получить его для вывода в журнал, когда он соответствует определенным критериям. У меня есть тысячи записей для изменения, поэтому я захотел сбрасывать их в файл и потом просматривать его. Благодарю. – mjpbeep

+0

Можете ли вы обновить свой вопрос, как бы выглядел журнал? – mjolinor

5

$ LastExitCode имеет дело с кодом выхода приложений Win32, а не PowerShell командлетов. Возможно, вам лучше проверить $? для True или False. $? переменная может сообщать как о командах Win32, так и о командлетах PowerShell. Вот текст из Get-Help about_Automatic_Variables:

$?

Содержит статус выполнения последней операции. Он содержит ИСТИНА, если последняя операция выполнена успешно, и FALSE, если она не удалась.

Вы также можете очистить $ Error, например $ Error.Clear(), а затем проверить значение $ Error [0], чтобы узнать, заполнено ли оно или нет после запуска вашей команды.

Смежные вопросы