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

有没有一种方法来设置默认的UPN后缀用于创build新用户的Active Directory?

例如,如果我有corp.mydomain.com作为我的AD域,并且我已经在域和信任下添加了一个备用UPN后缀,只是mydomain.com,是否有任何方法可以在创build新域时将该域设置为默认值用户?

我知道我可以创build一个模板用户,然后当我复制它时,它会有正确的默认后缀,但只是好奇,是否有一个隐藏的设置,将控制这一点。

没有logging的机制,我知道更改由Active Directory用户和计算机select的默认UPN后缀。 我相信这个工具是硬连线的,为您的目录林中的“CN = Partitions,CN = Configuration,…”中指定的域的“crossRef”对象上定义的“canonicalName”属性的第一部分。

AD用户和计算机恰好是这样做的硬连线。 如果您使用其他方式创build用户帐户(例如“NET USER … / add”),则不会为该帐户分配userPrincipalName属性。 默认的UPN后缀实际上只是AD用户和计算机中的默认值,而不是目录服务本身的默认值。

如果您遇到Microsoft知识库文章中带有脚本的文章,它将向您展示如何以编程方式获取默认的UPN后缀( http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441 ),注意脚本中有几个语法错误(第17行和第32行格式不正确,第32行的srrNamingContext应该是strNamingContext)。 在这个post的末尾,我会join一个固定的版本,但是会有一些小的改进(它会显示可以定义额外的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 

据我所知,这是无法完成的(Evan的答案在4年后依然如此)。

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

 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.com UPN后缀创build的用户将使用example.com后缀进行更新。

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

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

或者你可以使用一个“Get-adorganizationalUnit”和一个-Filter开关,并将其传递给“Set-ADOrganizationalUnit -Add @ {upnsuffixes =”@ UPNSuffix.com“

我查了一会之后才发现这个,所以我希望这对任何人都有帮助。

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

http://technet.microsoft.com/en-us/library/cc756018(WS.10).aspx

这里也有一个讨论:

http://technet.microsoft.com/en-us/library/cc739093(WS.10).aspx

我不能亲自担保,因为我从来没有这样做过,但有一件事情可以想到。 如果你打算这样做,你需要记住,虽然AD可以正常工作,但是对于任何第三方软件,情况可能并非如此,可能会认为UPN后缀总是标准的。 换句话说,在做出改变之前要仔细考虑后果。