使用 Python 从安全组中删除 AD 用户
Remove AD user from Security group using Python
我正在尝试使用 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:\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
编辑
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 有任何其他活动目录库可以推荐吗?
来自
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'
错误表明您使用的是不存在的 "group name",函数 find_group 需要一个已存在的组名,但您提供的是不存在的名称。
你应该仔细检查 "Tim Golden's active_directory module" 的手册。
对于
usr = GetObject("LDAP://CN=user,OU=users,DC=blah,DC=local")
grp.Remove(usr)
建议你加"print user"看看用户是否真的get了
好吧,我已经走了,发现我有点像布偶。我登录的帐户没有从 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")
我正在尝试使用 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:\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
编辑
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()
Python 3.3 有任何其他活动目录库可以推荐吗?
来自
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'
错误表明您使用的是不存在的 "group name",函数 find_group 需要一个已存在的组名,但您提供的是不存在的名称。 你应该仔细检查 "Tim Golden's active_directory module" 的手册。
对于
usr = GetObject("LDAP://CN=user,OU=users,DC=blah,DC=local")
grp.Remove(usr)
建议你加"print user"看看用户是否真的get了
好吧,我已经走了,发现我有点像布偶。我登录的帐户没有从 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")