Không có cơ chế tài liệu nào mà tôi biết để thay đổi hậu tố UPN mặc định được chọn bởi Người dùng và Máy tính Active Directory. Tôi tin rằng công cụ này có dây cứng để lấy phần đầu tiên của thuộc tính "canonicalName" được xác định trên đối tượng "crossRef" cho miền được chỉ định trong "CN = Partitions, CN = Cấu hình, ..." trong khu rừng của bạn.
Người dùng và Máy tính AD tình cờ gặp khó khăn khi thực hiện việc này. Nếu bạn tạo tài khoản người dùng bằng các phương tiện khác (ví dụ: "NET USER ... / add") thì sẽ không có thuộc tính userPrincipalName nào được gán cho tài khoản. Hậu tố UPN mặc định thực sự chỉ là mặc định trong Người dùng và Máy tính AD, không phải là mặc định của chính dịch vụ thư mục.
Nếu bạn chạy vào bài viết Microsoft KB có tập lệnh trong đó chỉ cho bạn cách lập trình có được hậu tố UPN mặc định ( http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441 ), lưu ý rằng tập lệnh có một vài lỗi cú pháp trong đó (dòng 17 và 32 không đúng định dạng và srrNamingContext trên dòng 32 phải là strNamingContext). Tôi sẽ bao gồm một phiên bản cố định với một cải tiến nhỏ ở cuối bài này (nó sẽ hiển thị cho bạn tên của các OU riêng lẻ nơi các hậu tố UPN bổ sung có thể được xác định).
Tôi muốn được sửa chữa bởi một người "hiểu biết" hơn tôi, nhưng tôi không thấy cách nào để khiến Người dùng và Máy tính AD hành động khác đi.
' --- 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