タグ
  Active Directory (51)
  ANSI (1)
  bash (1)
  BAT (14)
  bind (1)
  CentOS (3)
  CSharp (1)
  C言語 (4)
  DNS (3)
  Excel (1)
  Fedora (4)
  FreeBSD (3)
  iSCSI (1)
  Java (11)
  JavaScript (6)
  Link (4)
  Linux (15)
  Mail (1)
  Microsoft (4)
  NIS (1)
  OpenLDAP (2)
  OpenSolaris (4)
  PHP (2)
  PostgreSQL (2)
  PowerShell (33)
  RFC (3)
  Solaris (10)
  SQL Server (1)
  Ubuntu (3)
  VBScript (65)
  Visual Basic (1)
  VMware (2)
  Windows (14)
  WMI (16)
  WSF (5)
  WSH (10)
  作成中 (5)
  慣用句 (1)
  正規表現 (6)
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-2010 UPKEN