2015-05-27 28 views
7

Próbuję usunąć użytkownika z grupy zabezpieczeń za pomocą Pythona i pywin32, ale jak dotąd nie udało się. Jednak jestem w stanie dodać użytkownika do grupy bezpieczeństwa.Usuń użytkownika AD z grupy Security przy użyciu Python

from win32com.client import GetObject 

grp = GetObject("LDAP://CN=groupname,OU=groups,DC=blah,DC=local") 

grp.Add("LDAP://CN=username,OU=users,DC=blah,DC=local") # successfully adds a user to the group 

grp.Remove("LDAP://CN=username,OU=users,DC=blah,DC=local") # returns an error 

Błąd znajduje się poniżej:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<COMObject LDAP://CN=groupname,OU=groups,DC=blah,DC=local>", line 2, in Remove 
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 
0, -2147024891), None) 

Próbowałem również dodanie użyciu GetObject uzyskać użytkownika i usunąć go w ten sposób, jednak otrzymuję ten sam błąd.

usr = GetObject("LDAP://CN=user,OU=users,DC=blah,DC=local") 

grp.Remove(usr) 

Każda pomoc byłaby bardzo cenna, ponieważ trafiłem tutaj w ślepy zaułek.

EDIT

Mam również teraz spróbował wykorzystać moduł active_directory Tim Golden, aby spróbować usunąć członka grupy.

import active_directory as ad 

grp = ad.find_group("groupname") 
usr = ad.find_user("username") 

grp.remove(usr.path()) 

Jednak to również nie działa, a napotkam błąd poniżej.

Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\active_directory.py", line 799, in __getat 
tr__ 
    attr = getattr(self.com_object, name) 
AttributeError: 'PyIADs' object has no attribute 'group' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\active_directory.py", line 802, in __getat 
tr__ 
    attr = self.com_object.Get(name) 
pywintypes.com_error: (-2147463155, 'OLE error 0x8000500d', (0, 'Active Director 
y', 'The directory property cannot be found in the cache.\r\n', None, 0, -214746 
3155), None) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python33\lib\site-packages\active_directory.py", line 1081, in remove 

    self.group.Remove(dn) 
    File "C:\Python33\lib\site-packages\active_directory.py", line 804, in __getat 
tr__ 
    raise AttributeError 
AttributeError 

EDIT

Wherby zasugerował, że mogę zmienić na Pythonie 2.7 i dać to odchodzenie. Właśnie próbowałem:

import active_directory as ad 

user = ad.find_user("username") 
group = ad.find_group("groupname") 

group.remove(user.path()) 

... ale ja wciąż otrzymuję błąd

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<COMObject LDAP://CN=groupname,OU=groups,DC=blah,DC=local>", line 2, in remove 
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 
0, -2147024891), None) 

użytkownik i grupa są zdecydowanie uznał prawidłowo, jak mogę wydrukować swoje ścieżki i LDAP przy użyciu print user.path()print group.path()

Czy istnieją inne biblioteki Active Directory dla Pythona 3.3, które każdy może polecić?

Odpowiedz

0

Cóż, poszedłem i zorientowałem się, że jestem trochę muppet. Konto, na którym się zalogowałem, nie miało uprawnień do usunięcia z grup AD. Kiedy zalogowałem się jako administrator sieci, działało to jak czar.

Kod końcowy:

from win32com.client import GetObject 

group = GetObject("LDAP://CN=groupname,OU=Groups,DC=blah,DC=local") 

group.Remove("LDAP://CN=username,OU=Users,DC=blah,DC=local") 
0

Od

Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\active_directory.py", line 799, in __getat 
tr__ 
    attr = getattr(self.com_object, name) 
AttributeError: 'PyIADs' object has no attribute 'group' 

błędu wskazują używasz nie istniał „nazwa grupy” The find_group funkcji wymaganych anexisted nazwa grupy, ale nie dają istniał nazwę. Powinieneś dokładnie sprawdzić "Tim Golden's active_directory module".

Dla

usr = GetObject("LDAP://CN=user,OU=users,DC=blah,DC=local") 

grp.Remove(usr) 

proponuję dodać "user druku", aby zobaczyć, czy użytkownik rzeczywiście dostać.

+0

Co masz na myśli przez istniejącej nazwy grupy? Grupa zdecydowanie istnieje i kiedy ją otrzymam z find_group, jestem w stanie ją wydrukować. Jestem również w stanie wydrukować użytkownika. – ryansin

+0

Masz na myśli reklamę, że masz grupę o nazwie "grupa", a także masz użytkownika o nazwie "nazwa użytkownika"? – wherby

+0

Nie ...były to przykłady, w których zastąpiłem rzeczywistą nazwę grupy/użytkownika, ponieważ są one nieistotne. – ryansin