Обработка исключений с помощью AD PowerShell - PullRequest
0 голосов
/ 08 ноября 2018

Я создаю сценарий PowerShell для создания групп AD (глобальных и DomainLocal) путем импорта их имен из файла CSV. У меня проблемы с обработкой исключений, которые будут сгенерированы, если группы уже существуют. Чего я хочу добиться, так это если группы не существуют по имени в Csv, тогда PS должен создать их и показать сообщение «Группы были созданы», а если они уже существуют, то построчно отобразить «Группы уже существуют», чтобы если один существует, а другой нет, то должно отобразиться соответствующее сообщение.

То, что происходит, - то, что PS не отображает сообщение, когда он создал группы, и когда исключение действительно происходит, он отображает сообщение только для Глобальной группы, а не Локальной.

Пожалуйста, сообщите

Вот код -

Try {
    New-ADGroup -Name TestGlobal -GroupCategory Security -GroupScope Global -ManagedBy TEMP01 -Description "Owner is TEMP01" -Path (Some OU)
} Catch [Microsoft.ActiveDirectory.Management.ADException] {
    if ($_ -like "The specified group already exists") {
        Write-Host “!!! GLOBAL GROUP ALREADY EXISTS !!!”
    } elseif ($_ -eq $null) {
        Write-Host " GLOBAL GROUP CREATED SUCCESSFULLY "
    }
}
Try {
    New-ADGroup -Name TestLocal -GroupCategory Security -GroupScope DomainLocal -ManagedBy TEMP02 -Description "Owner is TEMP02" -Path (Some OU)
} Catch [Microsoft.ActiveDirectory.Management.ADException] {
    if ($_ -like "The specified group already exists") {
        Write-Host “!!! LOCAL GROUP ALREADY EXISTS !!!”
    } elseif ($_ -eq $null) {
        Write-Host " LOCAL GROUP CREATED SUCCESSFULLY "
    }
}

1 Ответ

0 голосов
/ 09 ноября 2018

PowerShell немного странен тем, что по умолчанию ошибки не заканчиваются. Это означает, что ошибки будут выводиться на консоль, но она просто перейдет к следующей строке кода, как будто ничего не произошло.

К сожалению, блоки Try реагируют только на завершающие ошибки.

Вы можете изменить это поведение. На обеих ваших New-ADGroup строках добавьте это в конец:

-ErrorAction Stop

Это скажет PowerShell, что вы хотите, чтобы он обрабатывал ошибки в этой строке как завершающие.

Если хотите, вы можете прочитать об этом здесь:

https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/09/handling-errors-the-powershell-way/

https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/05/weekend-scripter-using-try-catch-finally-blocks-for-powershell-error-handling/

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