首页 > 编程语言 >pyad(Python Active Directory)入门教程

pyad(Python Active Directory)入门教程

时间:2024-12-03 16:00:15浏览次数:8  
标签:group Python 入门教程 用户 pyad DC 对象 user Active

今年换了工作,需要比较频繁的操作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

相关文章

  • Python的变量作用域
    合法gcount=0defglobal_test():print(gcount)global_test()不合法,报错行:tmp=gcount+1gcount=0defglobal_test():tmp=gcount+1gcount=tmpprint(gcount)global_test()不合法gcount=0defglobal_test():gcount+......
  • 渗透测试入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    前言转眼间,从大三开始学安全,到现在也有五年了,也算是对渗透测试有一定理解,公众号准备出一些入门教程,以实操为主,希望可以帮助到想入门渗透测试的小白。如果觉得有用,可以在文章后面支持一下我,作为我写下去的动力。1.什么是渗透测试渗透测试就是模拟真实黑客的攻击手法对目......
  • python_Django---基础
    1.创建app终端:python3.xmanage.pystartapp app(名字)2.路由创建urls.py:导入函数:fromapp(app名)importviews创建路由:path("/index",views.index(函数名))3.HTML页面内容动态显示views.py:defindex(request):......
  • python logger 控制台,滚动文件
    defsetup_logger(logger_name,level=logging.INFO):logging.basicConfig(format='%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s:%(message)s',level=logging.DEBUG,filename='./l......
  • python毕设 基于JavaEE的民宿预订平台程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景随着旅游业的蓬勃发展,民宿作为一种新兴的住宿方式在国内外都受到了广泛关注。关于民宿预订平台的研究,现有研究主要以大型酒店预订平台......
  • 公共政策和法律法规数据抓取:基于Python爬虫技术抓取政府网站上的政策法规与最新更新
    引言在现代社会,公共政策和法律法规是社会运行的基础,政府网站成为了传播政策法规、更新法律信息的重要平台。随着政策变化和法律法规的更新,准确获取这些信息对于政府、企业、学者、甚至普通公民来说,都具有重要意义。为了有效抓取政府网站上的政策法规及其最新更新信息,爬虫技术......
  • 使用Python爬虫抓取跑步和健身平台上的运动数据
    引言随着科技的不断进步,越来越多的人开始关注健康生活,跑步和健身成为许多人日常生活的一部分。为了帮助人们更好地追踪自己的运动数据,许多健身平台如NikeRunClub、Strava、Keep等,提供了用户的跑步、健身记录,包括运动时长、距离、卡路里消耗、步频等详细数据。这些数据对运动......
  • Python | 再次分享10个Excel自动化脚本,一定有你用得上的!
    在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式。通过Python,我们可以实现对Excel文件的各种自动化操作,提高工作效率。本文将再次分享10个实用的Excel自动化脚本,以帮助新手小白更轻松地掌握这些技能。1.Excel单元格批量填充import pandas as pd# 批量......
  • Python 奇怪的设定:为什么没有 main 函数?
    大家好!上次我们简单聊了Python为什么没有main函数,今天我们来更详细地探讨一下,并用代码进行佐证,帮助大家彻底理解Python的代码执行机制!1.Python代码如何执行?Python是一种解释型语言,这意味着代码不需要编译成机器码,而是由Python解释器逐行读取并执行。2. `__na......
  • 5.3、Python 匿名函数与 Lambda 表达式
    大家好,欢迎来到Python小白入门课程!今天我们要学习的是一个非常方便的工具:匿名函数和Lambda表达式。1.什么是匿名函数?在Python中,我们通常使用def关键字来定义一个函数,例如:defadd(x,y):"""这个函数计算两个数的和"""returnx+yresult=add(3,5)......