【发布时间】:2020-12-21 02:45:25
【问题描述】:
我正在构建一个工具,用于使用 Powershell 在 AD 和 Exchange 中处理用户重命名。
脚本的一部分用于根据提供的信息构建适当的 UPN/PrimarySMTPAddress 值,检查与其他 AD 用户对象中的值是否存在冲突,并返回一个可用且适当的值供脚本使用。
考虑到从脚本中先前收集的新值生成的 UPN/PrimarySMTPAddress 可能导致新提议的 UPN 与当前值相同的情况,脚本当前简单地查找下一个可用的适当 UPN 的方法是不够好。
为了解决这个问题,我添加了一个简单的 If 检查生成的 UPN 值是否与当前 AD 用户对象的 UPN 相同,但这失败了,我不知道为什么。
这是我当前的完整代码,试图捕获重复项:
$UPNGivenName 是名字,只有字母字符和破折号。 $UPNSurname 是提供的姓氏,仅包含字母字符和破折号。$SMTPDomain 是域电子邮件后缀:例如 @contoso.com$UserAdUpn 是从目标 AD 对象的 UniversalPrincipalName 中提取。在脚本的前面,我已经确认找到了一个有效的 AD 对象并将其 UniversalPrincipalName 值直接拉入 $UserAdUpn。
If ($ChangeUPN -eq 'Y') {
$ProposedUPNBase = $UPNGivenName + "." + $UPNSurname
$checkNewUPNDupe = "$ProposedUPNBase$SMTPDomain"
If ($UserAdUpn -eq $checkNewUPNDupe) {
# Generated UPN matches current UPN
Write-Host "New UPN matches current UPN. No change."
$ChangeUPN = 'N'
}
Else {
#... 循环进行疯狂的 UPN 检查/创建内容。不相关
}
}
编辑:(我应该首先想到包括的东西,真的)
错误:即使我知道当前的 UPN 和建议的 UPN 相同,但不会触发重复检查并创建新的 UPN。
在上面添加了有关 UserAdUpn 来源的信息。
【问题讨论】:
-
你能解释一下它是如何失败的吗?乍一看,您在 $testProposedUPN 中插入了一个 0,并且似乎没有分隔用户名和域名的“@”。我认为这些查询将返回空......让我知道。谢谢。
-
我稍后会将其添加到问题中,但基本上当我知道建议的 UPN 值与现有值相同时,检查无法触发,导致每次运行都会生成一个新的 UPN具有递增值:first.last@contoso.com、first.last1@contoso.com 等。
-
我认为当它们相同时不会触发检查,因为:
If ($UserAdUpn -eq $checkNewUPNDupe){ ... }$UserAdUpn定义在哪里?有点混乱,因为有多个检查。
标签: powershell exchange-server