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

如何用PowerShell为AD安全主体设置AD组member属性写入权限?

给AD组的member属性授予指定安全主体写入权限的完整PowerShell实现

刚好我之前做过类似的需求,来帮你补全这段代码并解释清楚关键部分——你卡壳的...其实是ActiveDirectoryAccessRule构造函数的几个核心参数,特别是针对member属性的权限配置,必须精准指定属性的Schema GUID,不然会误授所有属性的写入权限。

完整可运行代码

# 替换为你的目标组名称和要授权的安全主体(用户/组)名称
$targetGroupName = "SalesTeam"
$authorizedPrincipalName = "TeamManagerJohn"

# 获取目标AD组对象(需要distinguishedName用于ACL路径)
$groupObject = Get-ADGroup -Identity $targetGroupName -Properties distinguishedName

# 获取要授权的安全主体的AD对象(用户或组都适用)
$authorizedPrincipal = Get-ADPrincipal -Identity $authorizedPrincipalName

# 动态获取AD中`member`属性的Schema GUID(比硬编码更可靠)
$memberPropertyGuid = Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext `
    -Filter { Name -eq 'member' } `
    -Properties ID | Select-Object -ExpandProperty ID

# 获取目标组的当前ACL
$groupAcl = Get-ACL -Path "AD:$($groupObject.distinguishedName)"

# 创建关键的Access Control Entry(ACE)
$accessRule = New-Object System.Security.AccessControl.ActiveDirectoryAccessRule(
    $authorizedPrincipal.SID,  # 安全主体的SID(比名称更稳定)
    [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty,  # 权限:写入属性
    [System.Security.AccessControl.AccessControlType]::Allow,  # 访问类型:允许
    $memberPropertyGuid,  # 目标属性的GUID:精准指定为member属性
    [System.DirectoryServices.ActiveDirectorySecurityInheritance]::None,  # 不继承(只作用于组本身)
    [System.Guid]::Empty  # 继承对象类型:空,因为不需要向下继承
)

# 将ACE添加到ACL中
$groupAcl.AddAccessRule($accessRule)

# 应用更新后的ACL到AD组
Set-ACL -Path "AD:$($groupObject.distinguishedName)" -AclObject $groupAcl

关键参数解释

你之前困惑的...部分对应的是这几个核心参数,我来逐个说明:

  • $authorizedPrincipal.SID:用安全主体的SID而不是名称,避免名称变更导致权限失效,更稳定。
  • WriteProperty:明确指定权限为“写入属性”,如果用GenericWrite会授予更宽泛的权限,不符合你的需求。
  • memberPropertyGuid:这是最关键的部分!必须指定member属性的Schema GUID,否则ACE会对组的所有属性生效,而不是仅仅member属性。动态获取GUID的方式比硬编码更适配不同的AD环境。
  • None(继承类型):因为我们只需要让权限作用于组对象本身,不需要继承到任何子对象(AD组本身没有子对象),所以设为None。

验证权限是否生效

执行完代码后,可以用以下命令验证ACE是否成功添加:

Get-ACL -Path "AD:$($groupObject.distinguishedName)" | 
    Select-Object -ExpandProperty Access | 
    Where-Object { $_.IdentityReference -match $authorizedPrincipalName }

你应该能看到一条权限为WriteProperty、目标属性为member的记录。

内容的提问来源于stack exchange,提问作者foo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:08:56