2016-12-16 16 views
0

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からアカウント名だけを取得しています。

ありがとうございます!

答えて

0

LDAPクエリのクラッシュコース 括弧は、個々の比較またはブール型命令を巡回します。だから、あなたのsearch_target与えられた:

  • (objectClass=user) - 比較
  • (& ...)の一例である - ブール値である「と」比較または他の命令
  • (| ...)...リストのための命令 - です...比較または他の命令のリストのブール型の「または」命令
  • (! ...) - ...比較リストまたは他の命令のブール型「not」命令
  • ここに示したように、単に、あなたのLDAPクエリに条件を追加し、特定の属性に基づいて検索するには

search_target = "(&(objectClass=user)(memberof=CN=Maximo,OU=Groups,DC=domain,DC=com)(sAMAccountName=%s))" % varWithSearchString 

あなたの出力に「sAMAccountNameのを」取得について:要するに

:変更あなたのattributes.get(name)attributes.get(name).get()

long:問題は、java.naming.directory.Attributes(plural)タイプのattributes.get()は、java.lang.Stringではなくjavax.naming.directory.Attribute(単数)を返します。そして、属性のpython文字列表現があなたが印刷しているものです。 Attributeが保持するjava.lang.Objectを取得するには、get()メソッドを呼び出す必要があります。

関連する問題