Python PyAD AD查询检查用户是否存在(如果不存在)创建它

Python PyAD AD查询检查用户是否存在(如果不存在)创建它,python,python-2.7,active-directory,yaml,pyad,Python,Python 2.7,Active Directory,Yaml,Pyad,我是Python的新手,我正在尝试查询一个AD服务器,并根据一些属性(用户名、名字、姓氏)检查用户是否存在,如果该用户存在,则查询他们的组以查看他们是否在特定组中,如果不在,则将他们添加到该组中。我有一个YAML文件,其中存储了用户的信息,以及我想添加的组: ADUser: firstName: <value> lastName: <value> username: <value> email: <value>

我是Python的新手,我正在尝试查询一个AD服务器,并根据一些属性(用户名、名字、姓氏)检查用户是否存在,如果该用户存在,则查询他们的组以查看他们是否在特定组中,如果不在,则将他们添加到该组中。我有一个YAML文件,其中存储了用户的信息,以及我想添加的组:

ADUser:
    firstName: <value>
    lastName: <value>
    username: <value>
    email: <value>
    group: <value of group I want them to join>
我正在使用PyAD库访问AD并运行搜索、用户创建和组设置。以下是文档的链接:

这是我开始写的:

    q = pyad.adquery.ADQuery()
    q.execute_query(
        attributes = (["firstName", <value>],["lastName", <value>],["username", <value>],["email", <value>])
        where_clause = "objectClass = '*'",
        base_dn = "OU=users, DC=domain, DC=com"
    )
我只是想知道是否有人能帮我指出这应该如何设置。不要担心访问实际的广告服务器,我只是想象从盒子本身运行这个

这就是我到目前为止所做的:

with open("AD.yaml", 'r') as stream:
    try:
        print(yaml.load(stream))
    except yaml.YAMLError as exc:
        print(exc)

def create_User(new_user, group, ):

    q = pyad.adquery.ADQuery()
    user = q.execute_query(
              attributes = ["firstName", "description"],
              where_clause = "objectClass = '*'",
              base_dn = "OU=users, DC=domain, DC=com"
           )
    if user == true:
        if user.is_member_of(group, "")
            logging.info('User is already created and is member of Specified AD Group')
        else
            user.add_to_group(user, group)
    else
        new_user = ADUser.create("%firstName", "%lastname", "" )
        group = ADGroup.from_dn(group)
        group.add_member(new_user)

您正在加载用户的信息,但仅打印它。你至少应该把它保存起来以备将来使用。除此之外,绝对没有必要使用不安全的
yaml.load()

这样,您就可以调用您的方法:

 user = data['AdUser']
 create_User(user['username'], user['group'])

除了不使用<代码> yAML.Load()> < /代码>:

之外,还有一些事情要考虑。
  • 在Python中,您不应该在自己编写的方法中使用camel_case(一些库符合非Python特定的大小写),因此将
    create_User
    更改为
    create_User
  • 为您要注册的其他内容(电子邮件等)向
    create\u user
    添加参数
  • 考虑将文件的顶层设置为一个序列,以便可以迭代从YAML加载的数据并一次性注册多个用户

    - firstName: <value>
      lastName: <value>
      username: <value>
      email: <value>
      group: <value>
    - firstName: <value>
      lastName: <value>
      username: <value>
      email: <value>
      group: <value>
    

您发布的Python不正确,两个
with
语句都没有缩进块。我认为这是因为你不熟悉这个网站的格式,并试图纠正它。如果结果与您计算机上的结果不符,请回滚编辑和/或在此处输入正确的代码。非常感谢您的回复!我将您的一些更改合并到我的代码库中。您对我设置的if语句或AD查询有何评论?我不确定你是否有任何关于如何调整的建议。对不起,我不太熟悉使用ActiveDirectory,所以对此我没有太多评论。这一行
if user==true
要求定义/导入
true
,这看起来有点奇怪。Python有
True
,但是您不会使用
=
(或者
)进行测试,然后如果用户:
from ruamel import yaml

with open("AD.yaml", 'r') as stream:
    try:
        data = yaml.load(stream)
        print(data)
    except yaml.YAMLError as exc:
        print(exc)
 user = data['AdUser']
 create_User(user['username'], user['group'])
- firstName: <value>
  lastName: <value>
  username: <value>
  email: <value>
  group: <value>
- firstName: <value>
  lastName: <value>
  username: <value>
  email: <value>
  group: <value>
for user in data:
    create_user(user['username'], user['group'])