2015-05-27 24 views
7

Sto tentando di rimuovere un utente da un gruppo di sicurezza utilizzando Python e pywin32, ma finora non hanno avuto esito positivo. Tuttavia, sono in grado di aggiungere un utente a un gruppo di sicurezza.Rimuovi utente AD dal gruppo Sicurezza utilizzando 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 

L'errore è inferiore:

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) 

Ho anche provato ad aggiungere utilizzando GetObject per ottenere l'utente e rimuovere in questo modo, tuttavia ottengo lo stesso errore.

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

grp.Remove(usr) 

Qualsiasi aiuto sarebbe molto apprezzato come ho colpito un vicolo cieco qui.

EDIT

Inoltre ho provato ora utilizzando il modulo active_directory di Tim Golden per cercare di rimuovere il membro del gruppo.

import active_directory as ad 

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

grp.remove(usr.path()) 

Tuttavia anche questo non funziona, e ho incontrato l'errore sotto.

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 suggerito che cambio a Python 2.7 e dare che un andare. Ho appena provato questo:

import active_directory as ad 

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

group.remove(user.path()) 

... ma sto ancora ricevendo un errore

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) 

L'utente e di gruppo sono sicuramente trovato correttamente, come posso stampare i loro percorsi LDAP utilizzando print user.path() e print group.path()

Esistono altre librerie di directory attive per Python 3.3 che chiunque può consigliare?

risposta

0

Bene, sono andato e ho capito che ero un po 'un muppet. L'account con cui ho effettuato l'accesso non disponeva delle autorizzazioni per l'eliminazione dai gruppi di annunci. Quando ho effettuato l'accesso come account amministratore di rete ha funzionato come un fascino.

Il codice finale:

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

Da

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' 

L'errore indicano che si sta utilizzando non esisteva "nome di gruppo", la funzione desiderata find_group nome del gruppo anexisted, ma non danno esisteva nome. Dovresti ricontrollare il manuale del modulo active_directory di Tim Golden.

Per

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

grp.Remove(usr) 

suggerisco di aggiungere "user stampa" per vedere se l'utente realmente ottenere.

+0

Che cosa si intende per nome di un gruppo esistito? Il gruppo esiste definitivamente e quando lo trovo con find_group sono in grado di stamparlo. Sono anche in grado di stampare l'utente. – ryansin

+0

Intendi in annuncio che hai un gruppo chiamato "gruppo" e hai anche un utente il cui nome è "username"? – wherby

+0

No ...quelli erano esempi in cui ho sostituito il nome effettivo del gruppo/utente perché sono irrilevanti. – ryansin