install-soft-on-Astra-linux/work-ad.py

126 lines
5.0 KiB
Python
Raw Permalink Normal View History

2023-12-01 15:24:23 +09:00
from ldap3 import Server, Connection, ALL, ALL_ATTRIBUTES, MODIFY_REPLACE, SUBTREE
from getpass import getpass
def connectAD():
# Получаем логин и пароль
admin_username = input("Введите логин администратора домена в формате UserName@yourdomain.zone: \n")
admin_password = getpass("Введите пароль: \n")
# Данные для подключения к Active Directory
server = Server('ldap://dct.yacsm.local')
try:
conn = Connection(server, user=admin_username, password=admin_password, auto_bind=True)
print("Соединение с AD установлено.")
except Exception as e:
print(f"Ошибка соединения с AD: {e}")
conn = None
return conn
def changePassADUser():
#Соединяемся с AD
conn = connectAD()
# Логин пользователя, пароль которого нужно изменить
user_to_reset = input("Введите логин пользователя домена в формате UserName@yourdomain.zone: \n")
new_password = getpass("Введите новый пароль пользователя: \n")
# Попытка смены пароля
try:
# Поиск пользователя
conn.search(search_base='dc=domain,dc=com',
search_filter=f'(sAMAccountName={user_to_reset})',
search_scope=SUBTREE,
attributes=['distinguishedName'])
if len(conn.entries) > 0:
user_dn = str(conn.entries[0].distinguishedName)
conn.extend.microsoft.modify_password(user_dn, new_password)
print(f"Пароль пользователя {user_to_reset} успешно изменен!")
else:
print(f"Пользователь {user_to_reset} не найден в Active Directory")
except Exception as e:
print(f"Ошибка при смене пароля: {e}")
def listOUFromAD():
#Соединяемся с AD
conn = connectAD()
try:
result = conn.extend.standard.paged_search(search_base='dc=domain,dc=com',
search_filter='(objectCategory=organizationalUnit)',
search_scope=SUBTREE,
attributes=['name'])
ou_list = [entry['attributes']['name'] for entry in conn.entries]
#print("Выберите подразделение:")
#for index, ou in enumerate(ou_list, start=1):
# print(f"{index}. {ou}")
#selected_index = int(input("Введите число, соответствующее выбранному подразделению: "))
#selected_ou = ou_list[selected_index - 1]
#print(f"Вы выбрали подразделение: {selected_ou}")
except Exception as e:
print(f"Ошибка при получении списка подразделений: {e}")
ou_list = None
return ou_list
def listUsersOUFromAD(selected_department):
#Соединяемся с AD
conn = connectAD()
selected_ou = selected_department
try:
result = conn.search(search_base=f'ou={selected_ou},dc=domain,dc=com',
search_filter='(objectCategory=person)',
search_scope=SUBTREE,
attributes=ALL_ATTRIBUTES)
entryes = conn.entries
#for entry in conn.entries:
# print(entry.entry_attributes_as_dict)
except Exception as e:
print(f"Ошибка при получении списка пользователей: {e}")
entryes = None
return entryes
def main():
#print("Что-то невообразивое")
# Получаем список подразделений
departments = listOUFromAD()
# Выводим меню для выбора пользователю
print("Список подразделений:")
for index, ou in enumerate(departments, start=1):
print(f"{index}. {ou}")
selected_department = input("Введите подразделение, для которого нужно получить список пользователей: ")
# Получаем список пользователей в выбранном подразделении
users = listUsersOUFromAD(selected_department)
# Выводим атрибуты пользователей в виде таблицы
for user in users:
print(user.entry_attributes_as_dict)
#print("Список пользователей в выбранном подразделении:")
#print("{:<20} {:<20} {:<30} {:<20}".format('Имя', 'Логин', 'Email', 'Дата создания'))
#for user in users:
# print("{:<20} {:<20} {:<30} {:<20}".format(user['displayName'], user['sAMAccountName'], user['mail'], user['whenCreated']))
if __name__ == "__main__":
main()