如何使用 PowerShell 在 Active Directory 中委派控制

最后更新于:

在 Active Directory (AD) 中委派权限 是一项关键的管理功能,使组织能够向用户或组分配特定权限,而无需授予完全的管理访问权限。委派简化了用户管理,执行最小权限原则,并允许帮助台或初级 IT 员工执行必要任务。本页介绍如何使用 PowerShell、Active Directory Users and Computers (ADUC) 以及 ADManager Plus 委派 AD 权限。

  • PowerShell
  • ADUC
  • ADManager Plus
  • 原生工具的限制
  • 为什么选择 ADManager Plus
  • 常见问题解答
 

如何使用 PowerShell 委派 AD 权限

PowerShell 允许您使用 dsacls.exe 工具在 OU、容器或对象级别向用户和组委派权限。

前提条件

  • 确保已安装 Windows PowerShell 的 AD 模块(通常是远程服务器管理工具的一部分)。
  • Open PowerShell as an administrator and import the AD module:
    Import-Module ActiveDirectory
  • 明确识别要委派的用户或组,以及委派的 OU 或对象。

使用 dsacls.exe 工具

这是一个基本的 PowerShell 脚本,使用 dsacls.exe 向 AD 用户委派权限(例如,重置密码)。该脚本在指定的 OU 上向指定的用户或组分配权限。

$OUPath = "OU=Target,DC=domain,DC=com"
$DelegateUser = "domain\GroupName"
dsacls $OUPath /I:T /G "$DelegateUser`:RPWP;Reset Password;user"

示例脚本和使用案例

示例 1:为 AD 用户委派重置密码权限

此脚本将重置用户密码和强制下次登录时更改密码的权限委派给指定 OU 内所有用户对象的指定 AD 用户。

$OU_Path = "OU=Users,DC=contoso,DC=local"
$Delegate_User = "HelpDesk"
Write-Host "Delegating Password Reset permissions for $OU_Path to user $Delegate_User..."
dsacls "$OU_Path" /G "$Delegate_User`:RPWP;Reset Password;user" /I:S /P:Y
dsacls "$OU_Path" /G "$Delegate_User`:RP;pwdLastSet;user" /I:S /P:Y
dsacls "$OU_Path" /G "$Delegate_User`:WP;pwdLastSet;user" /I:S /P:Y
Write-Host "Delegation complete. Replication may take some time."

示例 2:向组委派解锁账户权限

此脚本将读取和写入 lockoutTime 属性的权限委派给指定 OU 内所有用户对象的指定安全组。

$OU_Path = "OU=Office Employees,DC=contoso,DC=local"
$Delegate_Group = "HelpdeskGroup"
Write-Host "Delegating Unlock Account permissions for $OU_Path to group $Delegate_Group..."
dsacls "$OU_Path" /G "$Delegate_Group`:WP;lockoutTime;user" /I:S /P:Y
dsacls "$OU_Path" /G "$Delegate_Group`:RP;lockoutTime;user" /I:S /P:Y
Write-Host "Delegation complete. Replication may take some time."

示例 3:在 AD 中委派管理权限

此脚本授予 Helpdesk Admins 组对 Sales Users OU 的完全控制权限,有效地委派了完整的管理权限。

$OU_Path = "OU=Sales Users,DC=yourdomain,DC=com"
$Delegate_Group = "Helpdesk Admins"
Write-Host "Granting Full Control on OU $OU_Path to group $Delegate_Group..."
dsacls "$OU_Path" /G "$Delegate_Group`:GA" /I:T
Write-Host "Full Control delegation complete. The group $Delegate_Group now has full administrative rights over all objects in $OU_Path."

示例 4:委派创建和删除用户账户权限

此脚本允许向安全组授予在目标 OU 内创建和删除用户账户的权限。

$OU_Path = "OU=Office Employees,OU=Users,DC=contoso,DC=local"
$Delegate_Group = "SG-User-Provisioning"
Write-Host "Delegating Create/Delete User Accounts permissions for $OU_Path to group $Delegate_Group..."
Write-Host "------------------------------------------------------------------------------------"
dsacls "$OU_Path" /G "$Delegate_Group`:CC;user" /I:S
dsacls "$OU_Path" /G "$Delegate_Group`:DC;user" /I:S
Write-Host "Delegation complete. The group $Delegate_Group can now create and delete user accounts within $OU_Path."

支持的参数

以下是 PowerShell 委派任务中可用的重要参数:

参数 描述
/G <account>:<permissions> 向指定的用户或组授予指定权限(例如,RPWP 表示重置/写入密码,CC 表示创建子对象)。
/I:<flag> 控制作用范围:S 表示仅此对象,C 表示仅子对象,T 表示此对象及子对象。
<ObjectDN> 目标对象或 OU 的可分辨名称,权限应用于此(例如,OU=Sales,DC=domain,DC=com)。
:RPWP;user 表示对用户对象的重置密码和写入权限。
:WP;lockoutTime;user lockoutTime 属性 的写权限(用于解锁账户)。
:RP;lockoutTime;user lockoutTime 属性 的读权限(通常与写权限配合用于解锁委派)。
:GA 通用全部(完全控制)权限授予。
/P:Y 将权限传播到子对象(用于继承)。
-Identity 指定用于委派的用户、组或计算机(用于某些 PowerShell cmdlet,如 Add-ADPermission)。
-Add, -Remove, -Clear 用于以编程方式添加、删除或清除委派设置。

如何使用 ADUC 委派 AD 权限

ADUC 提供基于 GUI 的权限委派方法:

  1. 打开ADUC
  2. Right-click your target OU or container and select 委派控制.
    使用 ADUC 将控制权委派给 Active Directory 中的 OU。
  3. Delegation of Control Wizard 中,选择要委派的用户或组。
  4. 选择一个或多个任务(例如,重置用户密码,创建/删除用户帐户,读取所有用户信息)。
  5. 完成向导以应用委派。

如何使用 ADManager Plus 委派 AD 权限

ADManager Plus 通过提供基于 Web 的界面和基于角色的访问控制简化了委派:

  1. 导航至 Delegation > Help Desk Delegation > Help Desk Technicians
  2. 点击技术员姓名旁的 编辑 图标。
  3. In the 选择帮助台角色 drop-down menu, select your preferred role for the technician.
    使用 ADManager Plus 将 AD 管理和报告角色委派给技术人员。
     
     

    选择技术员的委派范围

     
     

    从预设和自定义角色列表中选择

  4. 点击 Save Changes

注意:要创建自定义角色,请导航至 Delegation > Help Desk Delegation > Help Desk Roles 并点击 + 创建新角色

使用本地工具进行 AD 委派的限制

虽然功能强大,但仅依赖 PowerShell 和 ADUC 进行委派可能会带来挑战:

  • 需要对 dsacls.exe 语法和 AD 对象的唯一名称有深入了解。
  • 脚本参数错误可能导致权限过度或配置错误。
  • 无内置的委派跟踪、审计或简易回滚功能。
  • 批量委派需要额外脚本以实现可扩展性。

使用 ADManager Plus 委派 AD 任务的优势

ADManager Plus 是一款集成的 AD、Exchange 和 Microsoft 365 管理解决方案,允许您委派对不同 AD 对象的管理和报告控制。

常见问题解答

运行以下脚本检查委派权限。它使用 Get-ACL cmdlet 检索访问控制条目(ACE),帮助识别哪些用户或组被委派了权限。

Import-Module ActiveDirectory
$acl = Get-Acl "AD:$OU"
Write-Host "`nDelegated permissions on: $OU`n" -ForegroundColor Cyan
$acl.Access | Where-Object { -not $_.IsInherited } | Select-Object `
IdentityReference,
ActiveDirectoryRights,
AccessControlType,
ObjectType,
InheritanceType |
Format-Table -AutoSize

对于无脚本方法,ADManager Plus 通过详细报告帮助管理员 查看委派权限

AD 中的非约束委派允许计算机或服务帐户在用户认证后模拟任何用户并代表其访问任何资源。启用后,用户的 Kerberos 票据授予票(TGT)存储在该系统上,使其能够自由请求访问其他服务。虽然这简化了多层应用的身份验证,但如果委派系统被攻破,则构成重大安全风险。攻击者可以利用存储的 TGT 横向移动或提升权限。

使用 PowerShell 委派 AD 中的 GPO 权限涉及使用 Set-GPPermission cmdlet(来自 GroupPolicy 模块)。以下脚本将委派 GpoEditDeleteModifySecurity 权限级别,赋予对特定 GPO 的完全控制,包括编辑、删除和修改其安全设置的能力。

Import-Module GroupPolicy
$gpoName = "My Test GPO"
$targetGroupName = "GPOAdmins"
$permissionLevel = "GpoEditDeleteModifySecurity"
if (Get-GPO -Name $gpoName -ErrorAction SilentlyContinue) {
Set-GPPermission -Name $gpoName -PermissionLevel $permissionLevel -TargetName $targetGroupName -TargetType Group
Write-Host "Permissions successfully delegated to '$targetGroupName' for GPO '$gpoName'."
} else {
Write-Host "GPO '$gpoName' not found." -ForegroundColor Red
}

对于无脚本方法,ADManager Plus 通过其直观的 GUI 控制台使您能够委派 GPO 管理和报告 任务。

使用 ADManager Plus 无脚本执行 AD 委派

Active Directory管理与报告的一站式解决方案
电子邮件下载链接 Email the ADManager Plus download link