2017-01-09 5 views
1

У меня есть странная проблема, когда я использую метод try/catch для некоторых командлетов, работающих на некоторых нет.Ловля ошибок в Powershell

Можете ли вы посоветовать это?

Это один работает отлично:

try 
{ 
$LookingForRemoteMailboxOnPrem = Get-RemoteMailbox $info -ErrorAction Stop | select -ExpandProperty UserPrincipalName 
} 
catch 
{ 
string]$t = $Error[0] 
} 

Но это один не является:

try 
{ 
$EnableRemoteMailbox = Enable-RemoteMailbox $info -RemoteRoutingAddress $remote -PrimarySmtpAddress $info2 -ErrorAction Stop 
} 
catch 
{ 
[string]$t = $Error[0] 
} 

ошибка не экономить до $ т переменной

+2

Какая ошибка, с которой не обрабатывается? Получаете ли вы такое же поведение, если вы устанавливаете '$ ErrorActionPreference = 'Stop''? –

+0

Попробуйте '$ t = $ _' вместо –

+0

@AnsgarWiechers $ ErrorActionPreference настроен для продолжения – user3574248

ответ

0

The $ErrorActionPreference установлен в Continue по умолчанию. Это означает, что если PowerShell может «восстановить» из-за ошибки, это не вызовет исключения. Вы можете использовать параметр -ErrorAction, чтобы изменить поведение каждого командлета.

Это link дает хороший пример:

Try {dir c:\missingFolder} Catch [System.Exception] {"Caught the exception"} Finally {$error.Clear() ; "errors cleared"}

Строка "Caught the exception не происходит в Windows PowerShell. Если вы установите -ErrorAction на Stop, будет создано исключение.

Подробнее описаны here.

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