首页 > 编程语言 >Python3 AD域操作

Python3 AD域操作

时间:2024-08-31 19:47:36浏览次数:9  
标签:domain AD self base user conn org 操作 Python3

#!/usr/bin/env python
# coding=UTF-8
'''
https://www.cnblogs.com/haiya2019/p/10627730.html
@Author: wjx @Description: AD域 @Date: 2018-12-23 21:23:57 @LastEditTime: 2019-03-28 23:46:56 ''' from ldap3 import Server, Connection, ALL, NTLM class Adoper(): ''' 操作AD域的类 ''' def __init__(self, domain, ip, admin='administrator', pwd=None): ''' domain: 域名,格式为:xxx.xxx.xxx ip: ip地址,格式为:192.168.214.1 admin: 管理员账号 pwd: 管理员密码 ''' self.domain = domain self.DC = ','.join(['DC=' + dc for dc in domain.split('.')]) # csc.com -> DC=csc,DC=com self.pre = domain.split('.')[0].upper() # 用户登陆的前缀 self.ip = ip self.admin = admin self.pwd = pwd self.server = Server(self.ip, get_info=ALL) self.conn = Connection(self.server, user=self.pre+'\\'+self.admin, password=self.pwd, auto_bind=True, authentication=NTLM) def search(self, org): ''' 查询组织下的用户 org: 组织,格式为:aaa.bbb 即bbb组织下的aaa组织,不包含域地址 ''' att_list = ['displayName', 'userPrincipalName','userAccountControl','sAMAccountName','pwdLastSet'] org_base = ','.join(['OU=' + ou for ou in org.split('.')]) + ',' + self.DC res = self.conn.search(search_base=org_base, search_filter='(objectclass=user)', # 查询数据的类型 attributes=att_list, # 查询数据的哪些属性 paged_size=1000) # 一次查询多少数据 if res: for user in self.conn.entries: yield user['displayName'] else: print('查询失败: ', self.conn.result['description']) return None def add_org(self, org): ''' 增加组织 oorg: 组织,格式为:aaa.bbb 即bbb组织下的aaa组织,不包含域地址 ''' org_base = ','.join(['OU=' + ou for ou in org.split('.')]) + ',' + self.DC res = self.conn.add(org_base, object_class='OrganizationalUnit') # 成功返回True,失败返回False if res: print(f'增加组织[ {org} ]成功!') else: print(f'增加组织[ {org} ]发生错误: ', self.conn.result['description']) def add_user(self, org, name, uid): ''' 增加用户 org:增加到该组织下 name:显示名称 uid:账号 ''' org_base = ','.join(['OU=' + ou for ou in org.split('.')]) + ',' + self.DC user_att = { 'displayName' : name, 'userPrincipalName' : uid + '@' + self.domain, # uid@admin组成登录名 'userAccountControl': '544', # 启用账号 'sAMAccountName': uid, 'pwdLastSet': -1 # 取消下次登录需要修改密码 } res = self.conn.add(f'CN={uid},{org_base}', object_class='user', attributes=user_att) if res: print(f'增加用户[ {name} ]成功!') else: print(f'增加用户[ {name} ]发生错误:', self.conn.result['description']) if __name__ == '__main__': ad93 = Adoper(domain='test.csc.com', ip='192.168.214.93', pwd='Winhong1234@#test') for user in ad93.search('信息科技部.总行.cibuser'): print(user) ad93.add_org('python02.cibuser') ad93.add_user('python02.cibuser', 'python03类用户', 'python03')

 

标签:domain,AD,self,base,user,conn,org,操作,Python3
From: https://www.cnblogs.com/tanaikang/p/18390674

相关文章

  • Python如何进行ADF(Augmented Dickey-Fuller)检验
    microPythonPython最小内核源码解析NI-motion运动控制c语言示例代码解析python编程示例系列python编程示例系列二python的Web神器Streamlit如何应聘高薪职位ADF(AugmentedDickey-Fuller)检验用于检查时间序列数据是否具有单位根,从而判断该序列是否平稳。主要用途平......
  • HTML元素的head、title
    <head>Html文档的头部,包含机器可读的文档相关信息,如文档的标题、脚本和样式表。<head> 主要保存供机器处理的信息,而非人类可读信息。对于人类可见的信息,如顶级标题和列出的作者,请参见 <header> 元素。示例1:<!doctypehtml><htmllang="zh-CN"> <head>   <metacharset="UT......
  • Linux内存操作之free命令
    在Linux操作系统中,free命令是一个非常重要的工具,用于显示系统内存(包括物理内存和交换空间)的使用情况。基本语法free[选项]常用选项-b或--bytes:以字节为单位显示内存信息。-k或--kilo:以千字节(KB)为单位显示内存信息。-m或--mega:以兆字节(MB)为单位显示内存信息(这......
  • Java利用POI实现对Word的操作(包括有换行的文本和图片)
    目录一、实现效果二、实现部分1、导入依赖2、工具类3、实体类4、测试代码如果您也有类似的需求,可以参考这篇文章进行实现并扩展。一、实现效果1、重要说明:①普通文本使用${字段名}进行标注,有换行的文本使用$${字段名}进行标注。②图片使用#{字段名}进行标注......
  • 数据的读取和写入,其中Reader便是其中之一
    在Java开发过程中,我们经常需要读取文件中的数据,而数据的读取需要一个合适的类进行处理。Java的IO包提供了许多类用于数据的读取和写入,其中Reader便是其中之一。本文将对Java中的Reader进行详细介绍,并分析其优缺点及应用场景。摘要本文将从以下几个方面对Java中的Reader类进行详......
  • 《NET CLR via C#》---第八章(类的实例构造器,结构的实例构造器,类型构造器,操作符重载方
    类的实例构造器构造器是将类型的实例初始化为良好状态的特殊方法。构造器方法在“方法定义元数据表”中始终叫做.ctor(constructor的简称)。创建引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型的实例构造器来设置对象......
  • Android开发 - ClassLoader 加载外部类解析
    ClassLoader是什么ClassLoader主要作用是将字节码文件(.class文件)加载到Java虚拟机(JVM)中,以便应用程序可以使用这些类ClassLoader的好处模块化加载:应用程序可能由多个模块组成,而这些模块可能需要按需加载插件机制:很多应用支持插件化,插件在安装或更新后需要动态加载......
  • python并发与并行(五.1) ———— 不要在每次fan-out时都新建一批Thread实例
    我们使用康威生命游戏的例子来解释这个专题。首先我们要实现一个康威生命游戏。这是个经典的有限状态自动机。它的规则很简单:在任意长宽的二维网格中,每个单元格都必须处于ALIVE或EMPTY状态,前者表示这个单元格里有生命存在,后者表示这里没有生物(或者原有生物已经死亡)。时钟每走一格......
  • TQRFSOC开发板47DR ADC输入采集测试(二)
            本章内容将介绍如何使用RFSOC47DR进行ADC输入采样测试,我们这边提供三个ADC输入采样的python程序,实现8路通道的ADC采样解析数据,并且在时域与频域上显示出示波器与频谱仪的效果。      进入我们提供的47dr_python文件夹。以py后缀的文件一共有四个,其中......
  • 金碟k3 使用py 实现对数据库的增删操作
    金蝶K/3是一款广泛使用的ERP系统,它支持多种数据库,如Oracle、SQLServer和MySQL。为了使用Python对金蝶K/3的数据库进行增删操作,我们需要选择合适的数据库驱动来连接数据库,并使用SQL语句来执行相应的操作。以下是一个示例,展示如何使用Python对金蝶K/3使用的数据库进行增删操......