作成 2010.01.07
更新 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 について補足のようなもの
LDAPの知識が無いと意味不明かもしれません。
DN (Distinguished Name:識別名 "CN=user1,OU=people,DC=test,DC=lan" のようなもの) はディレクトリ データベースの中で常にひとつしか無い状態を維持する必要があります。 Active Directory の CN は DN に使用されているため簡単に変更できません。
変更するには、コンテナ(Windows の場合は OU)を移動する形を取る必要があります。従って、cn は MoveHere でしか変更できないようになっています。
参考

VBScript で Active Directory ユーザーのCNを変更2 | IADsContainer インターフェース | IADsUser インターフェース


©2004-2017 UPKEN IPv4