Как обрабатывать исключения Active Directory через powershell? - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь обработать исключение ActiveDirectoryObjectNotFoundException в PowerShell при использовании метода Forest.GetForest.

https://msdn.microsoft.com/en-us/library/system.directoryservices.activedirectory.forest.getforest(v=vs.110).aspx

# Clear screen 
Clear

# Change below as per your requirements

$context='forest'
$name='My.Lab.Local'
$username="fake\Administrator"
$password="FakePassword"

Write-Host -Object "Connecting $context... -> $name "  -BackgroundColor Yellow -ForegroundColor Blue

try
{
        $DC = new-object System.DirectoryServices.ActiveDirectory.DirectoryContext($context,$name,$username,$password)
        Write-Host -Object "Successfully connected to $context using discovery account $username." -BackgroundColor Green -ForegroundColor Blue
        Write-Host -Object "Retrieving details of the forest..." -BackgroundColor Yellow -ForegroundColor Blue

        $Forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetForest($DC)        
        $Forest.Name
        Write-Host -Object "Successfully retrived your forest..." -BackgroundColor Green -ForegroundColor Blue

}

catch [System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException]
{
    Write-Host "ActiveDirectoryObjectNotFoundException exception"

}

catch [System.Security.Authentication.AuthenticationException]
{
    Write-Host "AuthenticationException exception ( Catch Block )"

}

finally
{
    Write-Host "cleaning up ...( Finally Block )"
}

Выход

Connecting forest... -> Web.Metacash.Com 
Successfully connected to forest using discovery account fake\Administrator.
Retrieving details of the forest...
AuthenticationException exception ( Catch Block )
cleaning up ...( Finally Block )

Как получить исходное сообщение о сбое вместо того, чтобы выдавать свое собственное сообщение, например, использовать сообщение $ _. Или что-то в этом роде?

1 Ответ

0 голосов
/ 29 апреля 2018

$ _ должен иметь ErrorRecord в блоке catch. Исключение должно быть там. Например, используйте $_.Exception.Message, чтобы получить его сообщение. Конечно, запись об ошибке содержит больше информации об ошибке. $_.InvocationInfo.ScriptLineNumber будет иметь номер строки, где произошла ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...