Share via


Сообщения об ошибках в Active Directory Powershell

В этом сообщении я расскажу о сообщениях об ошибках в Active Directory (AD) PowerShell. Хорошая  подсистема сообщений об ошибке – критична для успеха любого проекта потому что позволяет сэкономить время на решение проблемы.

Давайте начнем с основ. В случае ошибки, командлеты AD PowerShell выводят подробные сведения об ошибке.

 

 
PS C:\> New-ADUser -Name:"ADPSUser" -SamAccountName:"ADPSUser" -Enabled:$true
New-ADUser : The password does not meet the length, complexity, or history requirement of the domain.
At line:1 char:11
+ New-ADUser <<<<  -Name:"ADPSUser" -SamAccountName:"ADPSUser" -Enabled:$true
    + CategoryInfo          : InvalidData: (CN=ADPSUser,CN=...icrosoft,DC=com:String) [New-ADUser], ADPasswordComplexi
   tyException
    + FullyQualifiedErrorId : The password does not meet the length, complexity, or history requirement of the domain.
   ,Microsoft.ActiveDirectory.Management.Commands.NewADUser

 

Указанная выше ошибка – это на самом деле объект System.Management.Automation.ErrorRecord. В PowerShell, ошибки, произошедшие при выполнении командлетов и сценариев, сохраняются в переменной $Error (которая содержит объекты ErrorRecord). $Error – это массив, которые содержит последние ошибки, а переменная $Error[0] содержит самую последнюю ошибку.

 
PS C:\> $Error[0] | fl * -f
PSMessageDetails      :
Exception             : Microsoft.ActiveDirectory.Management.ADPasswordComplexityException: The password does not meet the ...
TargetObject          : CN=ADPSUser,...
CategoryInfo          : InvalidData: (CN=ADPSUser,CN=...icrosoft,DC=com:String) [New-ADUser], ADPasswordComplexityException
FullyQualifiedErrorId : The password does not meet the length, complexity, or history requirement of the ...
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
PipelineIterationInfo : {0, 1}

Как показано выше, ErrorRecord содержит объект Exception (Microsoft.ActiveDirectory.Management.ADPasswordComplexityException). AD PowerShell передает соответствующее исключение (exception) в зависимости от ошибки. Исключения могут быть System.UnauthorizedAccessException, System.TimeoutException, Microsoft.ActiveDirectory.Management.ADException и т.д.

 

На заметку: Исключения могут использоваться для обработки ошибок в сценарии. Я планирую написать об обработке ошибок в блоге более подробно. Вот еще несколько замечаний об обработке ошибок.

Объект исключения несет в себе диагностическую информацию, как показано ниже: 

 
PS C:\> $Error[0].Exception | fl * -f
ErrorCode          : 1325
ServerErrorMessage : 0000052D: SvcErr: DSID-031A120C, problem 5003 (WILL_NOT_PERFORM), data 0
Message            : The password does not meet the length, complexity, or history requirement of the domain.
Data               : {}
InnerException     : System.ServiceModel.FaultException: Active Directory returned an error processing the operation.
TargetSite         : Void ThrowExceptionForExtendedError(System.String, System.Exception)
StackTrace         :    at Microsoft.ActiveDirectory.Management.AdwsConnection.ThrowExceptionForExtendedError(String extendedErrorMessage, Exception innerException) in ...
HelpLink           :
Source             : Microsoft.ActiveDirectory.Management

Назаметку: ServerErrorMessage – это сообщение об ошибке, возвращенное сервером AD и кодировка текста в сообщении зависит от сервера.

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

--
Ашлиш Шарма (Ashish Sharma) [MSFT]
Developer – Active Directory Powershell Team

 

Перевод: Илья Лушников