No tengo conocimiento de ningún mecanismo documentado para cambiar el sufijo UPN predeterminado que eligen los Usuarios y equipos de Active Directory. Creo que la herramienta está cableada para tomar la primera parte del atributo "canonicalName" definido en el objeto "crossRef" para el dominio especificado en "CN = Particiones, CN = Configuración, ..." en su bosque.
Los usuarios de AD y las computadoras simplemente están cableados para hacer esto. Si crea cuentas de usuario utilizando otros medios ("USUARIO NETO ... / agregar", por ejemplo), entonces no se asignará ningún atributo userPrincipalName a la cuenta. El sufijo UPN predeterminado es realmente solo un valor predeterminado en Usuarios y equipos de AD, no un valor predeterminado del servicio de directorio en sí.
Si se encuentra con el artículo de Microsoft KB con un script que le muestra cómo obtener mediante programación el sufijo UPN predeterminado ( http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441 ), tenga en cuenta que el script tiene un par de errores de sintaxis (las líneas 17 y 32 están mal formadas y srrNamingContext en la línea 32 debería ser strNamingContext). Incluiré una versión fija con una mejora menor al final de esta publicación (le muestra los nombres de unidades organizativas individuales donde se pueden definir sufijos UPN adicionales).
Me gustaría ser corregido por alguien más "informado" que yo, pero no veo ninguna forma de lograr que los usuarios de AD y las computadoras actúen de manera 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