Não há nenhum mecanismo documentado que eu saiba para alterar o sufixo UPN padrão escolhido pelos Usuários e Computadores do Active Directory. Eu acredito que a ferramenta é hard-wired para obter a primeira parte do atributo "canonicalName" definido no objeto "crossRef" para o domínio especificado em "CN = Partitions, CN = Configuration, ..." em sua floresta. / p>
Os usuários e computadores de anúncios costumam ter uma conexão física para fazer isso. Se você criar contas de usuário usando outros meios ("NET USER ... / add", por exemplo), nenhum atributo userPrincipalName será atribuído à conta. O sufixo UPN padrão é, na verdade, apenas um padrão em Usuários e Computadores do AD, e não um padrão do próprio serviço de diretório.
Se você entrar no artigo da Base de Dados de Conhecimento da Microsoft com um script que mostre como obter programaticamente o sufixo UPN padrão ( link ), lembre-se de que o script possui alguns erros de sintaxe (as linhas 17 e 32 estão mal formadas e srrNamingContext na linha 32 deve ser strNamingContext). Vou incluir uma versão fixa com uma pequena melhoria no final deste post (mostra os nomes das UOs individuais onde os sufixos UPN adicionais podem ser definidos).
Adoraria ser corrigido por alguém mais "no conhecimento" do que eu, mas não estou vendo nenhuma maneira de fazer com que os usuários e computadores do AD atuem de maneira diferente.
' --- 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