active directory -使用Python从安全组中删除AD用户



我正在尝试使用Python和pywin32从安全组中删除用户,但到目前为止还没有成功。但是,我可以将用户添加到安全组。

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

错误如下:

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)

我也尝试添加使用GetObject来获取用户并以这种方式删除它,但我得到同样的错误。

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

我遇到了一个死胡同,请帮助我将不胜感激。

编辑

我现在也尝试使用Tim Golden的active_directory模块来尝试删除组成员。

import active_directory as ad
grp = ad.find_group("groupname")
usr = ad.find_user("username")
grp.remove(usr.path())

然而,这也不起作用,我遇到了下面的错误:

Traceback (most recent call last):
  File "C:Python33libsite-packagesactive_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:Python33libsite-packagesactive_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.rn', 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:Python33libsite-packagesactive_directory.py", line 1081, in remove
    self.group.Remove(dn)
  File "C:Python33libsite-packagesactive_directory.py", line 804, in __getat
tr__
    raise AttributeError
AttributeError

编辑

Wherby建议我改到Python 2.7并尝试一下。我刚试了一下:

import active_directory as ad
user = ad.find_user("username")
group = ad.find_group("groupname")
group.remove(user.path())

…但是我仍然得到一个错误

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)

用户和组肯定是正确找到的,因为我可以使用print user.path()print group.path()打印它们的LDAP路径

Python 3.3还有其他活动目录库可以推荐吗?

From

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

错误提示你使用了不存在的"组名",函数find_group需要一个存在的组名,但是你给出了不存在的组名。你应该仔细检查"Tim Golden的active_directory模块"的手册。

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

我建议你添加"print user",看看用户是否真的得到。

嗯,我已经发现我有点像个提线木偶。我登录的账号没有从AD组中删除的权限。当我以网络管理员帐户登录时,它就像魔法一样奏效了。

最终代码:

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")

最新更新