如何在Python中修改Active Directory对象的所有者
编程修改Active Directory计算机对象所有者的Python实现方案
要实现Python修改域计算机对象的所有者为指定部门组,核心是通过Windows安全API操作AD对象的安全描述符,和你提到的VB示例逻辑一致。以下是具体实现步骤:
1. 依赖准备
- 安装pywin32库,用于调用Win32 API和ADSI:
pip install pywin32
2. 核心代码实现
2.1 绑定AD计算机对象并获取安全描述符
首先通过LDAP路径绑定到目标计算机对象,读取其当前安全描述符:
import win32com.client import win32security # 替换为你的计算机对象完整DN和域信息 computer_dn = "CN=TestPC,OU=Computers,DC=yourdomain,DC=com" # 绑定到AD对象 ad_computer = win32com.client.GetObject(f"LDAP://{computer_dn}") # 获取当前安全描述符字符串 current_sd_str = ad_computer.Get("ntSecurityDescriptor")
2.2 获取目标部门组的SID
AD对象的所有者需要通过SID指定,因此先获取目标部门组的SID:
def get_domain_group_sid(group_name, domain): """获取域组的SID""" sid, _, _ = win32security.LookupAccountName(domain, group_name) return sid # 替换为你的部门组名和域名 target_group = "IT-Department-Group" domain_name = "yourdomain.com" group_sid = get_domain_group_sid(target_group, domain_name)
2.3 修改所有者并保存到AD
将安全描述符转为可编辑对象,设置新所有者后写回AD:
# 将安全描述符字符串转为可操作对象 sd = win32security.SECURITY_DESCRIPTOR() sd.from_string(current_sd_str) # 设置新所有者,第二个参数False表示不继承 sd.SetSecurityDescriptorOwner(group_sid, False) # 将修改后的安全描述符写回AD对象 ad_computer.Put("ntSecurityDescriptor", sd.to_string()) ad_computer.SetInfo()
3. 关键注意事项
- 执行代码的账号必须拥有修改AD对象所有者的权限(通常为域管理员或被授权的账号)
- 确保计算机对象的DN准确,可通过AD用户和计算机工具查询获取
- 目标部门组必须存在于域中,且执行账号有权限解析其SID
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

