作成 2010.01.07
更新 2010.01.07
更新 2010.01.07
VBScript で Active Directory ユーザーのCNを変更2
キモは MoveHere です。 CN の変更に合わせて、追随的に変更するコードです。
Option Explicit Const OldName = "usertest01" Const NewName = "usertest001" Dim WshShell, strEnvDnsDomain, arrItem Dim baseDN, objRootDSE Dim objConnection, objCommand, strCommandText Dim objRecordSet, strUserDN Dim objUser, objPOU, objNewUser Dim i baseDN = "" ' DNSドメインを取得しbaseDNを設定 Set WshShell = CreateObject("WScript.Shell") strEnvDnsDomain = WshShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%") strEnvDnsDomain = LCase(strEnvDnsDomain) If Left(strEnvDnsDomain, 1) = "%" Then WScript.Echo "操作しているPCはActive Directoryドメインに参加していないようです。" & vbNewLine & _ "終了します。" WScript.Quit End If arrItem = Split(strEnvDnsDomain, ".") baseDN = "" For i = 0 to UBound(arrItem) If i = 0 Then baseDN = "DC=" & arrItem(i) Else baseDN = baseDN & ",DC=" & arrItem(i) End If Next ' 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 ' 設定変更 If objRecordset.EOF Then strUserDN = "ログオンアカウント " & OldName & " は見つかりませんでした。" Else strUserDN = objRecordset.Fields("distinguishedName") Set objUser = GetObject("LDAP://" & strUserDN) Set objPOU = GetObject(objUser.Parent) Set objNewUser = objPOU.MoveHere(objUser.ADsPath, "CN=" & NewName) objNewUser.GetInfo objNewUser.Put "sAMAccountName", NewName objNewUser.Put "userPrincipalName", NewName & "@" & strEnvDnsDomain objNewUser.Put "sn", NewName objNewUser.Put "displayName", NewName objNewUser.SetInfo WScript.Echo objNewUser.ADsPath End If WScript.Echo "END" objConnection.Close Set objCommand = Nothing参考
VBScript で Active Directory ユーザーのCNを変更 | IADsContainer インターフェース | IADsUser インターフェース