Active Directory Kullanıcıları ve Bilgisayarları tarafından seçilen varsayılan UPN sonekini değiştirmeyi bildiğim belgelenmiş bir mekanizma yoktur. Aracın, ormanınızda "CN = Bölümler, CN = Yapılandırma, ..." 'da belirtilen etki alanı için "crossRef" nesnesinde tanımlanan "canonicalName" özniteliğinin ilk bölümünü almak için kablo bağlantılı olduğuna inanıyorum.
AD Kullanıcıları ve Bilgisayarları bunu yapmak için sadece kablolu olarak çalışır. Başka araçlar (örneğin "NET USER ... / add") kullanarak kullanıcı hesapları oluşturursanız, hesaba userPrincipalName özniteliği atanmaz. Varsayılan UPN soneki gerçekten AD Kullanıcıları ve Bilgisayarları için varsayılan değerdir, dizin hizmetinin varsayılanı değildir.
Microsoft KB makalesinde, varsayılan UPN sonekini program aracılığıyla nasıl elde edeceğinizi gösteren bir komut dosyası ile çalıştırırsanız ( http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441 ), betiğin içinde birkaç sözdizimi hatası olduğunu unutmayın (satır 17 ve 32 hatalı biçimlendirilmiştir ve satır 32'deki srrNamingContext strNamingContext olmalıdır). Bu yazının sonuna küçük bir iyileştirme içeren sabit bir sürüm ekleyeceğim (size ek UPN soneklerinin tanımlanabileceği ayrı OU'ların adlarını gösterir).
Benden daha fazla "bilen" biri tarafından düzeltilmesini isterim, ancak AD Kullanıcıları ve Bilgisayarları'nın farklı davranmasını sağlamak için herhangi bir yol göremiyorum.
' --- 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