Não há nenhum mecanismo documentado que eu saiba alterar o sufixo UPN padrão escolhido pelos usuários e computadores do Active Directory. Acredito que a ferramenta esteja conectada por cabo para levar a primeira parte do atributo "canonicalName" definida no objeto "crossRef" para o domínio especificado em "CN = Partições, CN = Configuração, ..." em sua floresta.
Usuários e computadores do AD apenas estão conectados 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 é realmente apenas um padrão em Usuários e computadores do AD, não um padrão do próprio serviço de diretório.
Se você encontrar o artigo da Microsoft KB com um script que mostra como obter programaticamente o sufixo UPN padrão ( http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441 ), cuidado para que o script contenha alguns erros de sintaxe (as linhas 17 e 32 estão malformadas e srrNamingContext na linha 32 deve ser strNamingContext). Incluirei uma versão fixa com uma pequena melhoria no final deste post (ele mostra os nomes de OUs individuais em que sufixos UPN adicionais podem ser definidos).
Eu adoraria ser corrigido por alguém mais "informado" do que eu, mas não estou vendo nenhuma maneira de fazer com que os usuários e computadores do AD ajam 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