Как управлять GroupPoliciy с использованием библиотеки ldap3 в python? - PullRequest
2 голосов
/ 31 января 2020

У меня проблемы с управлением групповой политикой сервера AD с помощью библиотеки ldap3.

Например, я добавляю политику New-GPLink . Я попытался добавить атрибут [New-GPLink:[LinkEnabled]], но получил ошибку.

Пожалуйста, предложите мне следующие пункты с ldap3:

  1. Как добавить групповую политику на сервере AD
  2. Как удалить групповую политику в AD Server
  3. Как изменить групповую политику в AD Server
  4. Можно ли запланировать операции установки и удаления с помощью библиотеки ldap3

Tried Thing:

  1. Добавить соединение
  2. Поиск пользователя
  3. Добавить атрибут GroupPolicy.

Код:

from ldap3 import Server, Connection, ALL, ALL_OPERATIONAL_ATTRIBUTES, ALL_ATTRIBUTES, ObjectDef, Reader
server = Server("192.168.1.28", get_info=ALL)
admin_username = 'lab\\administrator'
admin_password = 'A1B1C1$'
conn = Connection(server, user=admin_username, password=admin_password, auto_bind=True)
search_base = 'dc=lab,dc=com'
search_filter = '(userPrincipalName=shakti@lab.com)'
conn.bind()
conn.search(search_base=search_base, search_filter=search_filter, attributes=attributes_groups)
new_attribute = 'New-GPLink'
d_n = 'CN=shakti,DC=lab,DC=com'
conn.add(dn=d_n,object_class='user',attributes=new_attribute)

Ошибка получения ниже

TypeError                                 Traceback (most recent call last)
<ipython-input-292-425b72018c42> in <module>
----> 1 conn.add(dn=d_n,object_class='user',attributes=new_attribute)

c:\users\ankit.g\appdata\local\programs\python\python36\lib\site-packages\ldap3\core\connection.py in add(self, dn, object_class, attributes, controls)
    910 
    911             attr_object_class = [to_unicode(object_class) for object_class in attr_object_class]  # converts objectclass to unicode in case of bytes value
--> 912             _attributes[object_class_attr_name] = reduce(lambda x, y: x + [y] if y not in x else x, parm_object_class + attr_object_class, [])  # remove duplicate ObjectClasses
    913 
    914             if not _attributes[object_class_attr_name]:

TypeError: 'str' object does not support item assignment

1 Ответ

0 голосов
/ 01 февраля 2020

Проблема в том, что attributes должен быть словарем, а не строкой.

attributes: словарь в форме {'attr1': 'val1', 'attr2': 'val2',…} или {'attr1': ['val1', 'val2 ',…],…} Для многозначных атрибутов

Я не уверен насчет именования атрибутов и того, какое значение нужно установить точно, но ошибка касается только формата (также может быть что-то как {'gpLinkStatus': 1}), например

conn.add(dn=d_n,object_class='user',attributes={'New-GPLink':<value>})
...