Active DirectoryからsAMAccountName属性を取得してデータベーステーブルに格納したり、既存のデータに対して評価するためにjythonスクリプトを作成する必要があります。目的は、ユーザーがADのグループから削除されているかどうかを評価し、そのユーザーをMaximoで非アクティブに設定することです。スクリプトはアカウント名を戻し、LDAP照会で戻されなかったMaximoユーザーに対してはMaximoユーザーを非アクティブに設定します。 Maximoは、ユーザーがADから削除されたときにユーザーを削除したり、変更したりしません。これまでのコード例を見てみましょう。samAccountName属性値を取得するJython LDAPスクリプト
# Jython LDAP Example
from javax.naming import *
from java.util import *
from javax.naming.directory import *
# Credentials to access LDAP
user = "cn=binduser,dc=domain,dc=com"
passwd = "password"
# Query starting point and query target
search_start = "dc=domain,dc=com"
search_target = "(&(objectClass=user)(memberof=CN=Maximo,OU=Groups,DC=domain,DC=com))"
#search_attributes = "sAMAccountName"
# Setup LDAP Context Options
settings = Hashtable()
settings.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory")
settings.put(Context.PROVIDER_URL, "ldap://ldapserver:389")
settings.put(Context.SECURITY_PRINCIPAL, user)
settings.put(Context.SECURITY_CREDENTIALS, passwd)
# Connect to LDAP Server
ctx = InitialDirContext(settings)
srch = SearchControls()
srch.setSearchScope(SearchControls.SUBTREE_SCOPE)
# Execute LDAP Search
results = ctx.search(search_start, search_target, srch)
#Display Search`
for result in results:
attributes = result.getAttributes()
names = []
for atr in attributes.getIDs():
if atr == "sAMAccountName":
names.append(str(atr))
for name in names:
print attributes.get(name)
これにより、結果として「sAMAccountName:userid」が生成されます。
どうすればsAMAccountNameの値だけを検索したり返すように指示できますか?このスクリプトは、必須ではないユーザーに関連付けられたすべての属性を返します。ただし、sAMAccountNameのみが必要です。
最初の部分は、私が慣れていないLDAPからアカウント名だけを取得しています。
ありがとうございます!