Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
VBScript で書かれていますので、拡張子を vbs として保存してください。
このソースの解説はこちら。
【IDM】Active Directory から OpenLDAP への パスワードの同期 その2 ~ ADSI でパスワードを同期する
-------------------------------
On Error Resume Next
strDomain = "dc=example64,dc=jp"
strUserName = "testuser01"
strPassword = "ABC123@"
strLdapServer = "fedora01.example-fedora.jp"
strLdapUser = "uid=" & strUserName & ",ou=People,dc=example-fedora,dc=jp"
strManagerDN = "cn=Manager,dc=example-fedora,dc=jp"
strManagerPassword = "password"
'ユーザーを検索
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"<LDAP://" & strDomain & ">;" & _
"(&(objectCategory=person)(objectClass=user)" & _
"(sAMAccountName=" & strUserName & "));" & _
"DistinguishedName,sAMAccountName,unixUserPassword;" & _
"subtree"
Set objRecordSet = objCommand.Execute
'ユーザーのパスワード変更
Do Until objRecordset.EOF
strDN = objRecordset.Fields("DistinguishedName")
objRecordset.movenext
Loop
Set objUser = GetObject("LDAP://" & strDN)
objUser.SetPassword strPassword
objUser.SetInfo
'AD内でunixUserPassword が同期されるまで待つ
Wscript.Sleep 3000
'変更後のパスワードを取得
Set objRecordSet2 = objCommand.Execute
Do Until objRecordset2.EOF
arrUNIXUSERPASSWORD = objRecordset2.Fields("unixUserPassword")
For i = 1 To LenB(arrUNIXUSERPASSWORD(0))
strA = MidB(arrUNIXUSERPASSWORD(0), i, 1)
strB = AscB(strA)
strUnixUserPassword = strUnixUserPassword & Chr(strB)
Next
objRecordset2.movenext
Loop
'OpenLDAPに接続
set objLDAP = GetObject("LDAP:")
set objUser = objLDAP.OpenDSObject("LDAP://" & strLdapServer & "/" & strLdapUser, _
strManagerDN, _
strManagerPassword, _
0)
'パスワードを変更
objUser.Put "userPassword", "{CRYPT}" & strUnixUserPassword
objUser.SetInfo
'パスワードが変更されたかどうかをチェック
set objChkUser = objLDAP.OpenDSObject("LDAP://" & strLdapServer, _
strLdapUser, _
strPassword, _
0)
If Err.Number = 0 then
Wscript.Echo "パスワードは正しく同期されました(" & strLdapUser & ")"
else
Wscript.Echo "パスワードの同期でエラーが発生しました(" & strLdapUser & ")"
End If
Comments
- Anonymous
January 01, 2003
The comment has been removed - Anonymous
January 01, 2003
ある調べごとがあり、「'watch node'」 という単語を 某検索エンジンに放り込んだところ、以下の表示が。 もしかして: 'watch nude ' し、し、しっ、失礼なっっっ! それはともかく