我已经浏览过该问题的多个版本以及本网站和其他网站上提供的各种解决方案,但没有一个能解决我的问题或者为什么会发生这种情况。
我正在尝试使用现有 AD 对象作为模板来创建几个新的 AD 对象。该部分运行良好。
$objectInstance = Get-ADObject -Identity "CN=First Last,OU=Recipients,OU=NewExObjects,DC=DOMAIN,DC=ORG,DC=com" -Properties description,physicalDeliveryOfficeName,company,mailNickname,showInAddressBook,internetEncoding,msExchPoliciesExcluded,msExchRecipientDisplayType,msExchVersion,proxyAddresses,targetAddress
New-ADObject -Instance $objectInstance -Name "NewFirst NewLast" -DisplayName "NewFirst NewLast" -Type "contact" -Path "OU=Recipients,OU=NewExObjects,DC=DOMAIN,DC=ORG,DC=com" -OtherAttributes @{'mail'="[email protected]";'givenName'="NewFirst";'sn'="NewLast";'mailNickname'="NewFirstNewLast";'proxyAddresses'="SMTP:[email protected]";'targetAddress'="SMTP:[email protected]"}
我甚至可以几乎立即检索这个新对象:
$memberInstance = Get-ADObject -Identity "CN=NewFirst NewLast,OU=Recipients,OU=NewExObjects,DC=DOMAIN,DC=ORG,DC=com" -Properties *
Write-Host $memberInstance.DistinguishedName
上面的代码运行完美,向我显示了新对象的 DN。但是,当我尝试将新对象添加到组时,出现错误,指出无法找到具有该标识的对象:
$groupInstance = Get-ADGroup -Identity "CN=GroupName,OU=Recipients,OU=NewExObjects,DC=DOMAIN,DC=ORG,DC=com" -Properties *
Add-ADGroupMember -Identity $groupInstance.DistinguishedName -Members $memberInstance.DistinguishedName
这会产生以下错误:
Add-ADGroupMember : Cannot find an object with identity: 'CN=NewFirst NewLast,OU=Recipients,OU=NewExObjects,DC=DOMAIN,DC=ORG,DC=com' under: 'DC=DOMAIN,DC=ORG,DC=com'.
我完全不知道我做错了什么或我可能遗漏了什么。有人能帮忙吗?
答案1
您似乎正在使用联系人对象。当我尝试将邮件联系人添加到安全组时,我能够重现此错误。
安全组要求其成员是帐户或其他组(安全主体)。缺少安全标识符 (SID) 的联系对象不是安全主体。
资料来源:我的工作知识(另请参阅https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/active-directory-security-groups)
编辑如下:
Add-AdGroupMember cmdlet 不支持将联系人添加到任何组。
这添加ADGroupMembercmdlet 将一个或多个用户、组、服务帐户或计算机添加为 Active Directory 组的新成员。
似乎 cmdlet 有一个内置过滤器,其中仅包含特定 objectClasses 的对象 - 这就是为什么您的联系人显示为未找到的原因 - 它不符合过滤条件。
您需要使用不同的方法来实现您的目标。最简单的方法是使用 Exchange 管理外壳(如果您实际上有一个本地 Exchange 服务器):
Add-DistributionGroupMember -Identity $groupInstance.DistinguishedName -Member $memberInstance.DistinguishedName
否则,你可能需要恢复使用 Set-AdObject
Set-AdObject -Identity "CN=GroupName,OU=Recipients,OU=NewExObjects,DC=DOMAIN,DC=ORG,DC=com" -Add @{member=$($memberInstance.DistinguishedName)}
答案2
您正在尝试克隆 AD 对象,但这并不能保证它们实际上是用户对象,或任何类似于安全主体的东西(例如计算机对象)。如果您尝试将通用对象添加到组,这可能会失败,因为组对其可以作为成员的对象类型有特定要求。
使用 Get-ADUser 和 New-ADUser 等命令(或对于计算机、联系人、组等使用相同的命令)根据对象实际类型查找和克隆对象要好得多,而且不容易出错。
答案3
我正在尝试将该组添加到用户:
AXSDevelopers
我收到此错误:
Add-ADGroupMember : Cannot find an object with identity: 'AXSDevelopers' under: 'DC=nxmbus,DC=local'.
我打开了“Active Directory 用户和计算机”的用户界面,发现在
nxmbus.local -> nxmbus -> security groups -> AXSDevelopers -> properties -> Group name (pre-Windows 2000) is "Developers"
因此,现在我使用“Developers”作为组名而不是“AXSDevelopers”,它可以成功运行。