设置默认的UPN后缀以在Active Directory中创建新用户


12

有没有一种方法可以设置默认的UPN后缀,以便为Active Directory创建新用户?

例如,如果我将corp.mydomain.com作为我的AD域,并且在“域和信任关系”下添加了一个备用的UPN后缀,即mydomain.com,那么在创建新域时是否有任何方法可以将该域设置为默认域用户?

我知道我可以创建一个模板用户,然后在复制它时,它将具有正确的默认后缀,但是很好奇是否有一个隐藏的设置可以控制它。

Answers:


8

我没有任何已知的机制可以更改由Active Directory用户和计算机选择的默认UPN后缀。我认为该工具很难将森林中“ CN = Partitions,CN = Configuration,...”中指定的域用于“ crossRef”对象上定义的“ canonicalName”属性的第一部分。

AD用户和计算机只是碰巧要这样做。如果使用其他方式(例如“ NET USER ... / add”)创建用户帐户,则不会将userPrincipalName属性分配给该帐户。默认的UPN后缀实际上只是AD用户和计算机中的默认名称,而不是目录服务本身的默认名称。

您是否应该在Microsoft KB文章中运行脚本,该脚本向您展示如何以编程方式获取默认的UPN后缀(http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441),请注意,脚本中存在一些语法错误(第17和32行格式错误,第32行的srrNamingContext应该为strNamingContext)。我将在本文结尾处提供一个固定的版本,并对其进行较小的改进(它向您显示了可能定义了附加UPN后缀的各个OU的名称)。

我希望得到比我更能“了解”的人来加以纠正,但是我没有看到任何使AD用户和计算机采取不同行动的方法。

' --- Get the naming contexts ----
Set RootDSE = GetObject("LDAP://RootDSE")
strNamingContext = RootDSE.Get("defaultNamingContext")
strConfigContext = RootDSE.Get("configurationNamingContext")

' -- Get the current domain name --
Set oDomain = GetObject("LDAP://" + strNamingContext)
strDomainName = oDomain.Get("name")

Set oPartition = GetObject("LDAP://CN=Partitions," & strConfigContext)

'-- Get the DNS name of the domain --
oDomain.GetInfoEx Array("canonicalName"), 0
strCanonical = oDomain.Get("canonicalName")
strDNSName = Left(strCanonical, Len(strCanonical) - 1) 'clip off "/"

'-- Display the default UPN suffix
wscript.echo strDNSName

'-- Get the defined upnSuffixes --
suffixes = oPartition.GetEx("UPNSuffixes")
For Each upnSuffix In suffixes
  wscript.echo upnSuffix
Next
Set RootDSE = Nothing
Set oDomain =Nothing
Set oPartition = Nothing

' -- Get the upnsuffixes defined on organizational units --
Set ADOconn = CreateObject("ADODB.Connection")
Set ADOcom = CreateObject("ADODB.Command")

ADOconn.Provider = "ADsDSOObject"
bstrADOQueryString = "<LDAP://" + strNamingContext + ">;(objectcategory=organizationalUnit);upnsuffixes,ADsPath;subtree"
wscript.echo bstrADOQueryString 
ADOconn.Open
ADOcom.ActiveConnection = ADOconn

ADOcom.CommandText = bstrADOQueryString
ADOcom.Properties("Page Size") = 99

Set objRS = ADOcom.Execute

While Not objRS.EOF
   If Not IsNull(objRS.Fields("upnSuffixes")) Then
    upnsuffixes = objRS.Fields("upnSuffixes")
    For Each upnsuffix In upnsuffixes
        wscript.echo objRS.Fields("adsPath") & " - Suffix: " & upnsuffix
    Next
   End If

   objRS.MoveNext
Wend

Set objRS = Nothing
Set ADOcom = Nothing
Set ADOconn = Nothing

我希望有一些注册表项或其他内容。如果在接下来的24小时内没有其他人听到任何声音,我会将此标记为正确。
亚当·布兰德

在我们的例子中,我们运行一个每日脚本,该脚本检查每个用户的UPN,如果他们没有标准命名,它将更改为标准。该脚本查看许多属性,并在需要时更正它们。
KAPes

@KAPes:那是个好主意。在由多个委派的AD管理员创建用户帐户的站点,我通常已部署脚本来执行大多数预备杂务。不过,我仍然可以看到脚本化了一些LDAP查询以生成“嘿,假人-您配置了错误的消息!” 电子邮件(或者很明显,当计算机具有足够的信息来自动修复时,可以自动修复)。
埃文·安德森

埃文的答案仍然是正确的。有些人还建议在OU上设置uPNSuffixes属性。这将仅覆盖在域上设置的列表uPNSuffixes,但仍将默认为域的canonicalName。
charleswj81

8

据我所知,这是无法做到的(四年后,埃文的答案仍然是正确的)。

也就是说,我编写了一个脚本,该脚本每隔几个小时在任务调度程序中在一个以上的客户端上运行。它搜索一个特定的后缀(大多数情况下是默认值)并将其切换为另一个。该脚本在我的博客上,但我也会在此处发布它:)

Import-Module ActiveDirectory


Get-ADUser -Filter {UserPrincipalName -like "*@ad.example.com"} -SearchBase "OU=SomeUserOu,DC=ad,DC=example,DC=com" |
ForEach-Object {
    $UPN = $_.UserPrincipalName.Replace("ad.example.com","example.com")
    Set-ADUser $_ -UserPrincipalName $UPN
}

在这种情况下,使用ad.example.comUPN后缀创建的用户将使用example.com后缀进行更新。


我不得不考虑使用AD更改通知来实时执行此类操作,但这实在是太愚蠢了。
埃文·安德森

1
对于OFS和ADFS SSO的目录同步要求,UPN变得越来越重要。您可能认为现在已经有了一些东西:)
MDMarra

有时,我认为我是唯一实际使用 Microsoft产品的人。>微笑<我准备在接下来的几周内完成我的第一个Office365实施(完整的w /混合现场/异地Exchange),因此我将很快体验到所有ADFS SSO和DirSync的乐趣足够。
埃文·安德森

我没有直接做O365(我们有几个协作人员),但是我做过一些Intune工作,它们使用相同的Azure租户AD。希望您的第一趟旅程比我的还顺畅:)
MDMarra

添加一个注释,.Replace区分大小写,因此,如果UserPrincipalName为“ username@AD.Example.com”,则它将与字符串“ ad.example.com”不匹配。可以先添加.toLower()方法,如下所示:$ UPN = $ _。UserPrincipalName.toLower()。Replace(“ ad.example.com”,“ example.com”)
Chad Rexin

0

您可以通过进入ADSIEDIT.MSC设置允许的UPN后缀,插入到OU结构,右键单击OU(在默认配置中),然后编辑OU属性。要编辑的OU属性是UPNSuffixes。但是,这不会影响分配给在该OU中创建的用户的默认UPN。将所需的UPN后缀添加到此列表。接下来,创建要复制的模板用户。右键单击该OU,创建一个新用户用作模板,分配正确的UPN后缀,然后右键单击该用户(一旦创建)并禁用帐户。要创建新用户,请右键单击模板用户,然后复制..填写所选字段,然后将使用正确的UPN创建新用户。为不同的UPNS创建多个模板用户。或者,如果有疑问,请切换到Powershell。


-3

实际上,您可以在Powershell的Active Directory模块中运行:Set-ADOrganizationalUnit“ OU = XXX,DC = Domain,DC = com”-添加@ {upnsuffixes =“ @ UPNSuffix.com”。

或者,您可以使用带有-Filter开关的“ Get-adorganizationalUnit”,并将其通过管道传递给“ Set-ADOrganizationalUnit -Add @ {upnsuffixes =“ @ UPNSuffix.com”“

我在寻找了很长一段时间后才发现这个问题,因此希望对任何人有帮助。


问题是要设置用于添加新用户的默认后缀,而不是添加upn后缀。
奥斯丁2015年

-4

此technet文章介绍了如何在您的域中添加或删除UPN后缀:

http://technet.microsoft.com/zh-cn/library/cc756018(WS.10).aspx

这里也有讨论:

http://technet.microsoft.com/zh-cn/library/cc739093(WS.10).aspx

我无法亲自为此做担保,因为我从来不需要这样做,但是想到的一件事确实如此。如果要执行此操作,则需要记住,尽管AD可以正常运行,但对于您拥有的任何第三方软件,情况可能并非如此,这可以假定UPN后缀始终是标准的。换句话说,在进行更改之前,请仔细考虑后果。


2
是的,我知道如何添加UPN后缀。我的问题是设置添加新用户的默认后缀。
亚当·布兰德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.