基于adsi的面向对象活动目录管理框架

pyad的Python项目详细描述


简介:pyad是一个python库,旨在通过windows平台上的adsi向active directory提供一个简单的python接口。完整的文档可以在http://zakird.github.io/pyad/上找到。代码在https://github.com/zakird/pyad上维护。该库可以从pypi下载,网址为https://pypi.python.org/pypi/pyad。




requirements
===




::
pip install pypiwin32


也可以工作。




连接到活动目录
=============


pyad将连接到计算机加入的活动目录域(rootdse)::


from pyad import aduser
user=aduser.aduser.from_cn(“myuser”)




选项字典中连接到的每个对象的信息。身份验证是通过安全连接执行的,pyad不会通过明文传递凭据。可以在“set_defaults”调用中设置以下选项:“ldap_server”、“gc_server”、“ldap_port”、“gc_port”、“username”、“password”和“ssl”(true/false)。例如,以下代码将为通过pyad访问的所有对象设置默认连接参数:

from pyad import*
pyad.set_defaults(ldap_server=“dc1.domain.com”,username=“service_account”,password=“mypassword”)
user=pyad.aduser.aduser.from_cn(“myuser”)



连接到特定对象时也可以传入选项。这不会设置库的默认值,但这些设置将从从中派生的任何对象(例如,如果您请求用户的组成员资格)中使用示例:

from pyad import aduser
user=aduser.aduser.from_cn(“myuser”,options=dict(ldap_server=“dc1.domain.com”)



>basic object manipulation
======br/>


active目录中有不同类型对象的一阶python类。例如,aduser表示用户对象,adgroup表示组。所有对象都是ADObject的子类。大多数方法都是在ADObject中定义的,但是子类通常提供附加的辅助方法(例如ADUSER有“set_password”,ADGROUP有“add_member”)。

如果您已经知道对象的类型,则可以通过可分辨名称、cn、upn和guid连接到对象。示例:

from pyad import aduser
user1=aduser.aduser.from庠dn(“cn=myuser,ou=staff,dc=domain,dc=com”)
user2=aduser.aduser.from庠cn(“myuser”)
user3=aduser.aduser.from庠guid(“xxx-xxx-xxx”)


对python对象进行适当分类:

from pyad import pyad
user=pyad.from_cn(“user1”)
computer=pyad.from_dn(“cn=ws1,ou=workstations,dc=domain,dc=com”)
group=pyad.from_guid(“xxx-xxx-xxx”)


pyad对象与ADSI接口不同,pyad对象旨在彼此交互。不是将用户的dn添加到组的members属性以添加用户,而是将用户对象添加到组。例如:

user1=aduser.from_cn(“myuser1”)
user2=aduser.from_cn(“myuser2”)
group=adgroup.from_dn(“staff”)


group.add_members([user1,user2])

for user in group.get_members():
print user1.description



仍然可以直接操作pyad提供的helper方法之外的任何属性:

user.set_attribute(“description”,“new description”)
user.append_to_attribute(“member“,”cn=myuser1,ou=staff,dc=domain,dc=com“




有关如何操作找到的对象的详细信息,请参见下一节。





创建、移动和删除对象


在这两种情况下,必须首先绑定到父容器。创建新对象时,需要几个属性,但可以使用“optional_attributes”参数指定其他附加属性。示例1::

ou=adcontainer.from懔dn(“ou=workstations,dc=domain,dc=com”)


scope=“universal”,
可选的“属性”{“描述”:“我们公司的所有IT人员”})


它们可以移动:

computer=adcomputer.from_cn(“ws-500”)
computer.move(adcontainer.from_dn(“ou=workstations,ou=hr,dc=company,



>或更名为:



computer=adcomputer.from_cn(ws-500)




>computer.computer.rename(ws-501)可以通过调用delete():







>
或更名为:




或者更名为:

是的对象可以通过cn、dn、guid或upn直接连接到。但是,也可以通过adquery接口搜索对象(在后台,这是通过cn连接时实际找到对象的方式)。需要注意的是,由于性能原因,adquery接口不会为您提供pyad对象,而只提供您查询的属性。示例:

import pyad.adquery
q=pyad.adquery.adquery()

attributes=[“distinguishedName”,“description”],
where廑子句=“objectClass='*”,
base廑dn=“ou=users,dc=domain,dc=com“



对于q中的行,获取结果():
打印行[“distinguishedName”]


许可证
==


pyad是在apache许可证版本2.0(“许可证”)下获得许可的。您可以在http://www.apache.org/licenses/license-2.0.


上获取许可证副本,除非适用法律要求或书面同意,否则根据许可证分发的软件是按“原样”分发的,无任何明示或暗示的保证或条件。请参阅许可证,以了解控制许可证下权限和限制的特定语言。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中的多个控制台或显示屏?   java Guava:是否可能不使用多重映射映射所有条目。索引()?   java转换键值对作为JSON响应的对象?   java读取一个文本文件,然后计算字母频率,并从高到低列出它们   java Apache CXF为客户提供SEI   java如何在SQL查询中“转义”整个字符串   将JavaServlet定义为主网页servlet注释不起作用   运行jar文件时发生java FileNotFoundException   java有两种加载FXML的方法;为什么一个比另一个更受欢迎?   java无法切换到timeofindia站点页面中的帧   java Firebase Firestore在连接丢失后需要很长时间才能重新连接   java使用来自SQLite的通用数据填充RecyclerView/ListView   当我使用offer和poll独占访问它时,java是LinkedList线程安全的吗?   如何使用包含Java命名空间的XPath检索XML数据?   Spring Boot的java Elasticsearch Searchguard配置   java数组中的数组值赋值?   java保存成功,但更新失败使用Jointable的多对多Spring JPA和额外列   kotlin什么是java。构造器。单()?   简单解析例程的java问题