【问题标题】:Exception Handling with AD PowerShell使用 AD PowerShell 处理异常
【发布时间】:2019-04-12 09:04:48
【问题描述】:

我正在构建一个 PowerShell 脚本,通过从 Csv 文件中导入其名称来创建 AD 组(全局和域本地)。 如果组已经存在,我很难处理将生成的异常。 我想要实现的是,如果 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 "
    }
}

【问题讨论】:

  • 请发布一个简短的示例脚本(文本,而不是屏幕截图),其中仅包含重现问题所需的最少代码量。还要发布您遇到的错误(文本,而不是屏幕截图),并说明什么不起作用以及您想要做什么。
  • 请编辑/更新您的问题,而不是发表评论。

标签: powershell active-directory cmdlets


【解决方案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/

【讨论】:

  • 我现在解决了这个问题。谢谢你的建议!!
猜你喜欢
  • 2014-02-28
  • 2013-05-30
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2018-10-30
  • 2022-10-15
  • 2011-06-09
  • 1970-01-01
相关资源
最近更新 更多