python查询ad域用户名_Python操作AD域服务器进行组织和用户的查询和添加

由于工作中有时候会遇到需要对AD域服务器进行批量添加用户和组织的操作,平时都是通过bat批处理对csv文件中的用户和组织进行操作添加,但是操作起来还是略麻烦,就想自己动手用Python代码写个更好操作的方式,随便百度了下,还真的有相关的库——ldap3,先写点demo,后面再完善下吧。

基本操作方法:

from ldap3 import Server, Connection, ALL, NTLM# 连接server = Server("192.168.214.93", get_info=ALL)conn = Connection(server, user="TEST\\administrator", password="Winhong1234@#test", auto_bind=True, authentication=NTLM)print(server.info)# 查询res = conn.search("dc=test,dc=csc,dc=com", "(objectclass=user)", attributes=["objectclass"])print(conn.result) # 查询失败的原因print(conn.entries) # 查询到的数据# 增加组织res = conn.add("OU=python,OU=cibuser,DC=test,DC=csc,DC=com", object_class="OrganizationalUnit")if res: print("增加组织成功!")else: print("增加组织发生错误") if conn.result["description"] == "entryAlreadyExists": print("--该组织已存在")# 增加用户user01 = { "displayName" : "python测试用户01", # 显示名称 "userPrincipalName" : "python_user_01@test.csc.com", # 登录名 "userAccountControl": "544", # 启用账号 "sAMAccountName": "python_user_01", # 登录名 "pwdLastSet": -1 # 取消下次登录修改密码}res = conn.add("CN=python_user_01,OU=python,OU=cibuser,DC=test,DC=csc,DC=com", object_class="user", attributes=user01)# attributes支持的字段可以通过server.schema.object_classes["user"]获取print(res)print(conn.result)if res: print("增加用户成功!")else: print("增加用户发生错误") if conn.result["description"] == "entryAlreadyExists": print("--该用户已存在")

下面是准备改写成类:

#!/usr/bin/env python# coding=UTF-8"""@Author: wjx@Description: AD域@Date: 2018-12-23 21:23:57@LastEditTime: 2019-03-28 23:46:56"""from ldap3 import Server, Connection, ALL, NTLMclass 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")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值