2015-05-27 7 views
7

Ich versuche, einen Benutzer aus einer Sicherheitsgruppe mit Python und pywin32 zu entfernen, aber bisher nicht erfolgreich gewesen. Ich bin jedoch in der Lage, einen Benutzer zu einer Sicherheitsgruppe hinzuzufügen.AD-Benutzer aus der Sicherheitsgruppe mit Python entfernen

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 

Der Fehler ist unter:

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) 

Ich habe auch versucht, den Benutzer mit GetObject Hinzufügen zu bekommen und es auf diese Weise zu entfernen, aber ich den gleichen Fehler.

Jede Hilfe wäre sehr willkommen, da ich hier eine Sackgasse gefunden habe.

EDIT

Ich habe jetzt auch Tim Goldens active_directory Modul versucht, mit dem Gruppenmitglied, um zu versuchen und zu entfernen.

import active_directory as ad 

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

grp.remove(usr.path()) 

Allerdings funktioniert dies auch nicht, und ich finde den folgenden Fehler.

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 vorgeschlagen, dass ich zu Python 2.7 und geben ändern, dass ein Go. Ich habe das gerade versucht:

import active_directory as ad 

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

group.remove(user.path()) 

... aber ich bin noch immer einen Fehler

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) 

Die Benutzer- und Gruppen richtig auf jeden Fall gefunden, wie ich ihre LDAP-Pfade print user.path() mit drucken kann, und print group.path()

Gibt es andere Active Directory-Bibliotheken für Python 3.3, die jeder empfehlen kann?

Antwort

0

Nun, ich bin gegangen und herausgefunden, dass ich ein bisschen wie eine Muppet war. Das Konto, bei dem ich angemeldet war, hatte keine Berechtigungen zum Löschen von AD-Gruppen. Als ich mich als Netzwerkadministrator-Account anmeldete, funktionierte es wie ein Zauber.

Der endgültige Code:

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

Von

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' 

Der Fehler zeigen Sie nicht bestanden „Gruppenname“ verwenden, um die Funktion find_group anexisted Gruppenname erforderlich, aber Sie geben nicht Namen gab. Sie sollten "Tim Goldens active_directory module" Handbuch überprüfen.

Für

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

grp.Remove(usr) 

Ich schlage vor, Sie „print Benutzer“ hinzufügen, um zu sehen, ob der Benutzer wirklich bekommen.

+0

Was meinst du mit einem existierte Gruppennamen? Die Gruppe existiert definitiv und wenn ich sie mit find_group erhalte, kann ich sie ausdrucken. Ich bin auch in der Lage, den Benutzer zu drucken. – ryansin

+0

Sie meinen in der Anzeige haben Sie eine Gruppe namens "Gruppe", und haben auch einen Benutzer, der Name ist "Benutzername"? – wherby

+0

Nein ...Das waren Beispiele, bei denen ich den tatsächlichen Namen der Gruppe/des Benutzers ersetzte, weil sie irrelevant sind. – ryansin