AD PowerShell的异常处理

时间:2018-11-08 19:25:33

标签: powershell active-directory cmdlets

我正在构建PowerShell脚本,以通过从Csv文件导入它们的名称来创建AD组(全局和DomainLocal)。 我很难处理将在组已经存在的情况下生成的异常。 我要实现的是,如果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 :(得分:1)

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/