none
Как обработать исключения exchange в сессии powershell (не EMS!) RRS feed

  • Вопрос

  • Такой вопрос.

    Работаю с Microsoft Exchange в сессии powershell, устанавливая подключение с помощью new-PSSession

    Пытаюсь сделать обработку различных ситуаций при вызове кмдлета Get-Recipient.

    Например, если при вызове кмдлета указан нерабочий контроллер домена происходит следующее

    Get-Recipient aaaa -ErrorAction stop -DomainController dc1
    
    An Active Directory error 0x51 occurred when trying to check the suitability of server 'dc1'. Error: 'Active directory response: The LDAP server is unavailable.'
    At C:\Users\user\Documents\WindowsPowerShell\Modules\ExchangeModule\ExchangeModule.psm1:25039 char:9
    +         $steppablePipeline.End()
    +         ~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Get-Recipient], SuitabilityDirectoryException
        + FullyQualifiedErrorId : [Server=mbx1,RequestId=27f70386-fd1d-4e33-8e10-beb3c9aadeb5,TimeStamp=28.03.2015 5:14:50] [FailureCategory=Cmdlet-SuitabilityDirectoryException] B41D026,Microsoft.Exchange.Manageme 
       nt.RecipientTasks.GetRecipient
        + PSComputerName        : mbx1.domain.local

    Хочу сделать обработку этого исключения, пишу следующее

    try{
    Get-Recipient aaaa -ErrorAction stop -DomainController dc3
    }
    catch [SuitabilityDirectoryException]{ 
    Write-Debug "Контроллер не отвечает"
    }
    catch{
    #что-то общее
    }

    получаю

    Unable to find type [SuitabilityDirectoryException]. Make sure that the assembly that contains this type is loaded.

    Как правильно указать тип исключения?
    Пробовал и [Microsoft.Exchange.Management.RecipientTasks.GetRecipient] но тоже без толку.

    28 марта 2015 г. 6:00

Ответы

  • Проблема в том, что вы получаете не само исключение, а только сообщение о нем, т.к. исключение происходит на удаленном сервере, а в вашу сессию приезжает в результате serialization.

    Сазонов Илья http://isazonov.wordpress.com/

    • Помечено в качестве ответа KazunEditor 2 апреля 2015 г. 8:50
    28 марта 2015 г. 6:31
    Модератор
  • $ErrorActionPreference = "Stop"
    $DebugPreference = "Continue"
    try {
    	Get-Recipient aaaa  -DomainController dc3
    }
    catch {
    	switch($_.CategoryInfo.Reason)
    	{
    		"SuitabilityDirectoryException" {Write-Debug "Контроллер не отвечает"}
    		default {Write-Debug "ERROR"}
    	}
    }

    • Помечено в качестве ответа KazunEditor 2 апреля 2015 г. 8:50
    29 марта 2015 г. 6:44
    Отвечающий

Все ответы

  • Проблема в том, что вы получаете не само исключение, а только сообщение о нем, т.к. исключение происходит на удаленном сервере, а в вашу сессию приезжает в результате serialization.

    Сазонов Илья http://isazonov.wordpress.com/

    • Помечено в качестве ответа KazunEditor 2 апреля 2015 г. 8:50
    28 марта 2015 г. 6:31
    Модератор
  • $ErrorActionPreference = "Stop"
    $DebugPreference = "Continue"
    try {
    	Get-Recipient aaaa  -DomainController dc3
    }
    catch {
    	switch($_.CategoryInfo.Reason)
    	{
    		"SuitabilityDirectoryException" {Write-Debug "Контроллер не отвечает"}
    		default {Write-Debug "ERROR"}
    	}
    }

    • Помечено в качестве ответа KazunEditor 2 апреля 2015 г. 8:50
    29 марта 2015 г. 6:44
    Отвечающий