我正在构建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 "
}
}
答案 0 :(得分:1)
PowerShell有点奇怪,因为默认情况下错误是无止境的。这意味着错误将输出到控制台,但是它将继续进行到下一行代码,就像什么也没发生一样。
不幸的是,Try
块仅响应终止错误。
您可以更改此行为。在您的New-ADGroup
的两行中,将其添加到末尾:
-ErrorAction Stop
这将告诉PowerShell您希望它将该行上的错误视为终止。
如果需要,您可以在此处进行更多阅读:
https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/09/handling-errors-the-powershell-way/