回答:
Active Directoryユーザーとコンピューターによって選択されるデフォルトのUPNサフィックスを変更するために知っている、文書化されたメカニズムはありません。このツールは、フォレストの "CN = Partitions、CN = Configuration、..."で指定されたドメインの "crossRef"オブジェクトで定義された "canonicalName"属性の最初の部分を取得するように配線されていると思います。
ADユーザーとコンピュータは、たまたまこれを行うために配線されています。他の手段(たとえば、「NET USER ... / add」)を使用してユーザーアカウントを作成した場合、userPrincipalName属性はアカウントに割り当てられません。デフォルトのUPNサフィックスは、実際にはADユーザーとコンピューターのデフォルトであり、ディレクトリサービス自体のデフォルトではありません。
プログラムで既定のUPNサフィックス(http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441)をプログラムで取得する方法を示すスクリプトを使用して、Microsoft KB記事を実行する必要があります。スクリプトにはいくつかの構文エラーがあることに注意してください(17行目と32行目は不正な形式であり、32行目のsrrNamingContextはstrNamingContextである必要があります)。この投稿の最後に、マイナーバージョンの改善された修正バージョンを含めます(追加のUPNサフィックスが定義される可能性のある個々のOUの名前を示します)。
私よりも「よく知っている」誰かに訂正されることを望んでいますが、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
私の知る限り、これを行うことはできません(4年後のエヴァンの答えはまだ真実です)。
つまり、複数のクライアントで数時間ごとにタスクスケジューラで実行するスクリプトを作成しました。特定のサフィックス(ほとんどの場合デフォルト)を検索し、別のサフィックスに切り替えます。スクリプトは私のブログにありますが、ここにも投稿します:)
Import-Module ActiveDirectory
Get-ADUser -Filter {UserPrincipalName -like "*@ad.example.com"} -SearchBase "OU=SomeUserOu,DC=ad,DC=example,DC=com" |
ForEach-Object {
$UPN = $_.UserPrincipalName.Replace("ad.example.com","example.com")
Set-ADUser $_ -UserPrincipalName $UPN
}
この場合、ad.example.com
UPNサフィックスで作成されたユーザーは、サフィックスで更新されexample.com
ます。
許可されたUPNサフィックスを設定するには、ADSIEDIT.MSCに移動し、OU構造にプラグインし、OUを右クリックして(既定の構成で)、OU属性を編集します。編集するOU属性はUPNSuffixesです。ただし、これはそのOU内で作成されたユーザーに割り当てられたデフォルトのUPNには影響しません。目的のUPNサフィックスをこのリストに追加します。次に、コピーするテンプレートユーザーを作成します。OUを右クリックし、テンプレートとして使用する新しいユーザーを作成し、正しいUPNサフィックスを割り当て、作成したユーザーを右クリックしてアカウントを無効にします。新しいユーザーを作成するには、テンプレートユーザーを右クリックし、選択したフィールドにコピーして入力します。適切なUPNで新しいユーザーが作成されます。異なるUPNSに対して複数のテンプレートユーザーを作成します。または、疑わしい場合は、Powershellに切り替えます。
実際には、PowershellのActive Directoryモジュールで実行できます:Set-ADOrganizationalUnit "OU = XXX、DC = Domain、DC = com" -Add @ {upnsuffixes = "@ UPNSuffix.com"。
または、-Filterスイッチを使用して「Get-adorganizationalUnit」を使用し、「Set-ADOrganizationalUnit -Add @ {upnsuffixes = "@ UPNSuffix.com"」にパイプすることもできます。
私はかなり長い間探した後にこれを見つけたので、これが誰にも役立つことを願っています。
このTechnetの記事では、ドメインでUPNサフィックスを追加または削除する方法について説明しています。
http://technet.microsoft.com/en-us/library/cc756018(WS.10).aspx
ここでそれについての議論もあります:
http://technet.microsoft.com/en-us/library/cc739093(WS.10).aspx
私はこれをする必要がなかったので、私は個人的にそれを保証することはできませんが、一つのことが頭に浮かびます。これを行う場合は、ADが正常に機能している間は、サードパーティのソフトウェアの場合は同じではない可能性があることに注意する必要があります。 。つまり、変更を加える前に結果を慎重に検討してください。