Немає документально підтвердженого механізму зміни суфіксу UPN за замовчуванням, який вибирають користувачі та комп’ютери Active Directory. Я вважаю, що інструмент важко провідний, щоб прийняти першу частину атрибута "canonicalName", визначеного на об'єкті "crossRef", для домену, зазначеного у "CN = Розділи, CN = Конфігурація, ..." у вашому лісі.
Користувачам та комп’ютерам AD просто трапляється робити це важко. Якщо ви створюєте облікові записи користувачів за допомогою інших засобів (наприклад, "NET USER ... / add"), атрибут userPrincipalName не буде призначений для цього облікового запису. Суфікс UPN за замовчуванням насправді є лише типовим для користувачів AD і комп’ютерів AD, а не за замовчуванням самого каталогу служб.
Якщо ви зіткнетесь зі статтею Microsoft KB із скриптом, який показує, як програмно отримати суфікс UPN за замовчуванням ( http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441 ), майте на увазі, що скрипт має в ньому пару синтаксичних помилок (рядки 17 і 32 неправильно сформовані, а srrNamingContext у рядку 32 повинен бути strNamingContext). Я включу фіксовану версію з незначним поліпшенням в кінці цієї публікації (вона показує назви окремих ОУ, де можуть бути визначені додаткові суфікси UPN).
Я б хотів, щоб мене виправили хтось, хто більше «знає», ніж я, але я не бачу жодного способу змусити користувачів 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