Проверка 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'])