今年换了工作,需要比较频繁的操作AD域控,但是之前同事写的PS脚本比较不灵活(主要是我也不太会PS),然后就想能不能使用Python来编写一些自动化程序操作域控,便找到了pyad这个库。
pyad是一个第三方Python库,用于管理Microsoft Active Directory,可以将AD对象表示为Python对象(ADUser、ADGroup、ADContainer等),并使用相应的方法访问和修改其属性。官方文档为:https://zakird.github.io/pyad/
可是官方文档和网上的教程都因为过时有一些错漏之处,我花了一番力气才弄清楚了基本的使用方法,于是决定写一篇基于Python 3.11、pyad 0.60版本的基础使用教程。
安装
可以通过pip安装pyad:
pip install pyad
同时还需要安装pywin32:
pip install pywin32
注意:pywin32库还需要满足几个前置条件,例如Visual C++ 14.0等。
引入模块
先引入需要的模块:
from pyad import pyad, adcontainer, aduser, adcomputer, adgroup
连接AD
如果已经是已经加了域的设备,可以直接用目前登录的域用户来连接加入的域来运行pyad。否则在开始使用pyad之前,需要使用以下代码创建AD域的连接(最好还是用加域的设备来使用pyad,否则会有一些奇怪的bug):
# 设置默认的LDAP服务器、用户名和密码,以便后面的操作
pyad.set_defaults(ldap_server='dc.example.com', username='my_username@example.com', password='my_password')
操作容器
容器是指域控中的一个OU或容器(比如默认的Users),其中包含了各种子项。pyad可以对容器对象进行许多操作,但是用得比较多的是获取其中的子项对象功能。
获取容器对象(注意路径参数必须是'OU=xx,OU=User,DC=example,DC=com'这种格式,容器的名称是用CN来标记的):
container = adcontainer.ADContainer.from_dn('OU=User,DC=example,DC=com')
获取容器对象中的所有的子项对象列表:
container_childrens = container.get_children()
操作分组
分组是指用于管理权限的各种分组。同样,pyad可以对分组对象进行许多操作,但是用的比较多的是获取其中的对象和添加或移除其中的对象。
获取分组对象(分组的名称是用CN来标记的):
group = adgroup.ADGroup.from_dn('CN=Domain Admins,CN=Users,DC=example,DC=com')
获取分组中所有的对象列表:
group_members = group.get_members()
添加对象到分组中:
group.add_members(object)
移除分组中的对象:
group.remove_members(object)
操作用户
pyad可以对用户对象进行非常多的操作,比如创建用户、读写用户的各种属性,启用或禁用用户、重置用户密码、添加或删除用户所属的组等等等等…
创建用户:
new_user = aduser.ADUser.create(
name = 'jdoe', # 用户名
container_object = container, # 用户所在的容器对象
password='MyNewPa$$word6', # 用户密码
optional_attributes={
'givenName': 'John', # 用户的名字
'sn': 'Doe', # 用户的姓氏
'displayName': 'John Doe', # 用户的显示名称
'sAMAccountName': 'jdoe', # 用户的登录名(Windows 2000以前版本)
'userPrincipalName': 'jdoe', # 用户的登录名
'mail': 'jdoe@domain.com' # 用户的电子邮件地址
}
)
上面的代码使用了aduser.ADUser.create()函数来创建一个新用户,其中需要指定用户名、容器对象、密码和一些可选属性,如名字、姓氏和显示名称等等。
根据用户名获取AD用户对象(存在多个同名CN时会报错):
user = aduser.ADUser.from_cn('jdoe')
根据绝对路径获取AD用户对象:
user = aduser.ADUser.from_dn('CN=jdoe,OU=User,DC=example,DC=com')
读取用户的属性值:
given_name = user.get_attribute('givenName') # 'givenName'参数指名字
print(given_name)
给用户写入属性值:
user.update_attribute('givenName', 'jack')
如果想要获取用户的各种属性名称可以使用:
user_attributes = user.get_allowed_attributes()
print(user_attributes)
调整用户设置:
user.set_user_account_control_setting('DONT_EXPIRE_PASSWD', True) # 'DONT_EXPIRE_PASSWD'参数指密码永不过期
如果想要获取所有用户设置信息可以使用:
user_settings = user.get_user_account_control_settings()
print(user_settings)
禁用用户:
user.disable()
启用用户:
user.enable()
重置用户密码:
user.set_password('MyNewPa$$word7')
移动用户到其它容器:
user.move(container)
把用户添加到分组:
user.add_to_group(group)
从用户所属组中删除:
user.remove_from_groups(group)
操作计算机
pyad中计算机常用的操作和用户是类似的,就不赘述了。
标签:group,Python,入门教程,用户,pyad,DC,对象,user,Active From: https://www.cnblogs.com/takanashikotori/p/18584282