Сообщения об ошибках в 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
Перевод: Илья Лушников