【问题标题】:Jython LDAP script to retrieve sAMAccountName attribute value用于检索 sAMAccountName 属性值的 Jython LDAP 脚本
【发布时间】:2016-12-16 16:04:23
【问题描述】:

我需要创建一个 jython 脚本来从 Active Directory 中检索 sAMAccountName 属性,并将其存储在数据库表中和/或根据现有数据对其进行评估。目的是评估用户是否已从 AD 中的组中删除,并在 Maximo 中将该用户设置为非活动状态。该脚本将返回帐户名称,并将 Maximo 用户设置为未通过 LDAP 查询返回的那些 Maximo 用户。从 AD 中删除用户后,Maximo 不会删除或以其他方式修改用户。这是到目前为止我从示例中找到的代码。

# 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 中检索我不熟悉的帐户名称。

谢谢!

【问题讨论】:

    标签: ldap jython maximo


    【解决方案1】:

    LDAP 查询速成课程 括号围绕每个单独的比较或布尔指令。所以,给定你的 search_target:

    • (objectClass=user) -- 是一个比较的例子
    • (& ... ) -- 是用于... 比较列表或其他指令的布尔“与”指令
    • (| ... ) -- 是用于... 比较列表或其他指令的布尔“或”指令
    • (! ... ) -- 是用于... 比较列表或其他指令的布尔“非”指令

    要根据特定属性进行搜索,只需将条件添加到您的 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()

    长话短说:您的问题是attributes.get(),属于 java.naming.directory.Attributes(复数)类型,返回 javax.naming.directory.Attribute(单数),而不是 java.lang.String。属性的 python 字符串表示就是您要打印的内容。要获取Attribute持有的java.lang.Object,需要调用它的get()方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-04
      • 2010-12-10
      • 1970-01-01
      • 2011-08-18
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      相关资源
      最近更新 更多