You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:42:25