LDAPの知識が無いと意味不明かもしれません。
DN (Distinguished Name:識別名 "CN=user1,OU=people,DC=test,DC=lan" のようなもの) はディレクトリ データベースの中で常にひとつしか無い状態を維持する必要があります。 Active Directory の CN は DN に使用されているため簡単に変更できません。
変更するには、コンテナ(Windows の場合は OU)を移動する形を取る必要があります。従って、cn は MoveHere でしか変更できないようになっています。
作成 2010.01.07
更新 2010.02.03
更新 2010.02.03
VBScript で Active Directory ユーザーのCNを変更
キモは MoveHere です。
コード
Option Explicit Const OldName = "usertest1" Const NewName = "usertest001" Dim baseDN, objRootDSE Dim objConnection, objCommand, strCommandText Dim objRecordSet, strUserDN Dim objUser, objPOU, strPOUName baseDN = "" ' ベースDNの取得 On Error Resume Next Set objRootDSE = GetObject("LDAP://rootDSE") If Err.Number <> 0 Then WScript.Echo "ドメイン接続に失敗しました。終了します。" WScript.Quit Else baseDN = objRootDSE.Get("defaultNamingContext") End If On Error Goto 0 ' DCに接続して検索 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" objCommand.ActiveConnection = objConnection strCommandText = "<LDAP://" & baseDN & ">;" & _ "(&(objectClass=user)(sAMAccountName=" & OldName & "));" & _ "distinguishedName;" & _ "subtree" objCommand.CommandText = strCommandText Set objRecordSet = objCommand.Execute ' CN変更 If objRecordset.EOF Then strUserDN = "ログオンアカウント " & OldName & " は見つかりませんでした。" Else strUserDN = objRecordset.Fields("distinguishedName") Set objUser = GetObject("LDAP://" & strUserDN) Set objPOU = GetObject(objUser.Parent) objPOU.MoveHere objUser.ADsPath, "CN=" & NewName End If WScript.Echo "END" objConnection.Close Set objCommand = Nothing
Active Directory の CN について補足のようなもの
参考
VBScript で Active Directory ユーザーのCNを変更2 | IADsContainer インターフェース | IADsUser インターフェース