Проверка PyAD AD Query, если пользователь существует, если не создать его

Я довольно новичок в Python и пытаюсь сделать запрос к серверу AD и проверить, существует ли пользователь на основе некоторых атрибутов (username, firstName, lastName), и, если этот пользователь существует, запросить их группы, чтобы увидеть, находятся ли они в конкретной группы, и если нет, добавьте их в эту группу. У меня есть файл YAML, в котором я храню информацию о пользователе, а также группу, в которую я хочу добавить их:

ADUser:
    firstName: <value>
    lastName: <value>
    username: <value>
    email: <value>
    group: <value of group I want them to join>

Вот код для разбора файла yaml:

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

Я использую библиотеку PyAD для доступа к AD и запуска своих поисков и создания пользователей и настройки группы. Вот ссылка на документацию: https://zakird.com/pyad/index.html

Вот что я начал писать:

    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"
    )

Вот методы, которые я хочу использовать для создания пользователей, добавления групп и запросов (я пытаюсь выяснить, хорошо ли они выглядят или нет, и как именно их использовать с YAML, который у меня есть):

#User Creation
create_user(name, password=None, upn_suffix=None, enable=True, optional_attributes={})
#Find Members of a group
get_memberOfs(recursive=False, scope='all')¶
#Add an object to a group
add_to_group(group)
#Query AD
q = pyad.adquery.ADQuery()
q.execute_query(
    attributes = ["distinguishedName", "description"],
    where_clause = "objectClass = '*'",
    base_dn = "OU=users, DC=domain, DC=com"
)

Мне просто интересно, если кто-нибудь может помочь мне указать, как это должно быть настроено. Не беспокойтесь о доступе к реальному серверу AD. Я просто представляю себе, как запустить его из коробки.

Это то, что я сделал до сих пор:

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)

1 ответ

Вы загружаете информацию о пользователе, но вы только печатаете ее. Вы должны по крайней мере сохранить его для дальнейшего использования. Кроме того, нет необходимости использовать небезопасные yaml.load()

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'])

Есть несколько вещей, которые следует учитывать, кроме неиспользования yaml.load():

  • в Python вы не должны использовать camel_case в методах, которые вы пишете сами (некоторые библиотеки соответствуют не-Pythonesc-специфическому регистру), поэтому измените create_User в create_user
  • добавить параметры в create_user для других вещей вы хотите зарегистрироваться (электронная почта и т. д.)
  • рассмотрите возможность сделать верхний уровень вашего файла последовательностью, чтобы вы могли перебирать данные, загруженные из YAML, и регистрировать несколько пользователей за один раз.

    - 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'])
    
Другие вопросы по тегам