Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

如何使用 PowerShell 在组中添加和移除 AD 组及对象

如何使用 PowerShell 在组中添加和移除 AD 组及对象

Mar 17, 2023

Microsoft Active Directory 作为用于管理、授权和身份验证的集中式枢纽。 在 AD 中,对网络资源的访问会授予安全主体(security principals),例如用户帐户和计算机帐户,而且这些权限可能会随时间而变化。 为简化访问管理并提升安全性,中大型企业通常使用 Active Directory security groups ,它们可以包含用户帐户、计算机帐户以及其他组。 他们通常还会使用分发组(distribution groups)来管理电子邮件分发列表。 无论是安全组还是分发组,都具有唯一的安全标识符(SIDs)和全局唯一标识符(GUIDs)。

ADUC MMC 管理单元非常适合管理这两种类型的组,但 PowerShell 在批量管理时要高效得多。

如果您还不熟悉 AD 组以及组管理,请在继续之前先阅读 Active Directory Group Management Best Practice 指南。

另外请记住,为了使用这些 PowerShell 脚本,您必须导入用于与 AD 交互的模块——Microsoft Windows PowerShell 的 Active Directory 模块。该模块是在 Windows Server 2008 R2 中引入的,并且在 Windows Server 2012 及更高版本中默认启用。您可以通过运行以下命令获取 AD 模块 cmdlet 的完整列表:

      Get-Command -Module ActiveDirectory
      

完整列表包含 147 个 cmdlet;不过,其中只有这 11 个与 Active Directory 组相关:

PowerShell output listing Active Directory group management cmdlets from the ActiveDirectory module.
  • Add-ADGroupMember
  • Add-ADPrincipalGroupMembership
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Get-ADGroupMember
  • Get-ADPrincipalGroupMembership
  • New-ADGroup
  • Remove-ADGroup
  • Remove-ADGroupMember
  • Remove-ADPrincipalGroupMembership
  • Set-ADGroup

使用 PowerShell 创建 Active Directory 组

要创建 AD 组,请使用 New-ADGroup cmdlet。你可以通过运行以下命令来获取其语法:

      Get-Command New-ADGroup –Syntax
      
PowerShell syntax for the New-ADGroup cmdlet.

创建组最简单的方法是运行这个简短脚本:

      New-ADGroup "Group Name"
      

系统会要求你指定“GroupScope”参数,然后创建一个新组。不过,该组将使用默认值,例如:

  • 它将创建在名为“Users”的默认 LDAP 容器中。
  • 它将具有“Security”组类型。
  • 成员、member of、description、email 和 notes 字段都将为空。

假设我们想在 AD DC 上创建一个名为“Quality”的安全组。我们使用以下参数:它应位于“Production”OU(-Path),它应是安全组(-GroupCategory),并且应是全局(-GroupScope)。

      New-ADGroup "Quality" -Path "OU=Production,DC=enterprise,dc=com" -GroupCategory Security -GroupScope Global -PassThru –Verbose
      
A PowerShell console showing the creation of an Active Directory group named

如果要创建通用的分发组,只需将 –GroupCategory 参数改为“Distribution”,并将 –GroupScope 参数改为“Universal”。你还可以通过修改 –Path 参数来更改 LDAP 路径。

使用 PowerShell 删除 Active Directory 组

要删除 AD 组,请使用 Remove-ADGroup cmdlet。最简单的脚本如下所示:

      Remove-ADGroup -Identity Quality
      

系统会提示你确认删除该组。

使用 PowerShell 向组中添加用户和计算机

你可以使用 Add-AdGroupMember cmdlet 将用户添加到 AD 组。例如,如果你需要将两个用户 B.Jackson 和 E.Franklin 添加到“Quality”组,脚本会如下所示:

      Add-AdGroupMember -Identity Quality -Members B.Jackson, E.Franklin
      

当你将用户添加到安全组后,可以运行下面的脚本来验证他们是否作为成员列出:

      Get-ADGroupMember -Identity Quality
      
PowerShell output showing details for Active Directory group members Edward Franklin and Bill Jackson.

如果你需要将用户添加到另一个安全或分发组(例如 “Domain Admins”),请将 “Domain Admins” 指定为 –Identity 参数的值。 如果你需要让一个组成为另一个组的成员,请将组名指定为 –Members 参数的值。 同样的原则也适用于计算机帐户,但你需要在计算机帐户名称的末尾追加一个美元符号($)。例如,要将计算机 “WKS043” 添加到某个组中,请将 –Member 参数的值指定为 “WKS043$”:

      Add-AdGroupMember -Identity Quality -Members WKS043$
      

将用户添加到多个组

要一次性将用户添加到多个组,请运行以下脚本。

      "Managers","Quality" | Add-ADGroupMember -Members `
    (Read-Host -Prompt "Enter User Name")
      

从 CSV 文件向组添加用户

如果要向某个组添加大量用户,可以在 CSV 文件中指定它们,然后导入该文件。请注意,CSV 文件中的用户名列表必须包含 SamAccountNames(在“users”列中)。

要从 CSV 文件向组添加用户,请运行以下 PowerShell 脚本:

      Import-CSV C:scriptsusers.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity "Quality" -members $_.users}
      
PowerShell output showing details for four Active Directory group members.

将用户从一个组复制到另一个组

如果要将一个组中的所有成员复制到另一个组,请运行以下脚本:

      Get-ADGroupMember “Quality” | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “QualityControl” -Members $_}
      

从组中移除用户或计算机

要从组中移除用户,请使用以下 Remove-ADGroupMember cmdlet:

      Remove-ADGroupMember -Identity Quality -Members J.Robinson
      
Confirm dialog box asking to perform a

要从组中移除计算机帐户,请在计算机名称末尾加上美元符号($),以作为 -Members 参数的值。

从组中移除多个用户帐户

从 AD 组中移除多个用户的一种简便方法是创建一个包含用户名列表的 CSV 文件,然后使用此脚本将这些用户从组对象中移除:

      Import-CSV C:scriptsusers.csv -Header users | ForEach-Object {Remove-ADGroupMember -Identity "Quality" -members $_.users}
      

从所有组中移除用户

要将用户从所有组中移除,请运行以下脚本:

      Get-ADUser -Identity E.Franklin -Properties MemberOf | ForEach-Object {
  $_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false
}
      
PowerShell output showing user E.Franklin is a member of the 'Domain Users' group, which is a Security Global group.

请注意,用户将失去除“Domain Users”以外的所有组成员资格;如果需要,可以手动移除“Domain Users”。

Active Directory 组的报表

既然我们已经知道如何使用 PowerShell 执行许多与组相关的常见 Active Directory 管理任务,让我们看看如何报告 AD 中存在哪些组:

要列出 AD 中的所有组,请使用下面的脚本:

      Get-ADGroup -filter * -properties GroupCategory | ft name,groupcategory
      
PowerShell output listing Active Directory groups and their consistent 'Security' category.

当然,您还需要查看 AD 组成员以及 AD 组成员身份的变更。以下是执行这些更复杂任务的操作说明链接:

结论

既然你已经学会了如何使用 PowerShell 脚本在 Active Directory 中管理组及组成员关系,试着自己完成一些组管理任务吧。不过请务必小心,并且不要忘记 启用 Active Directory 回收站(Recycle Bin)功能 ,这样如果出现问题,你就可以轻松回滚更改。记住,ADUC MMC 管理单元非常适合管理组及组成员关系,但当需要批量管理组时,PowerShell 要好得多。

分享到

了解更多

关于作者

Asset Not Found

Jeff Melnick

系统工程总监

Jeff 是 Netwrix 的前 Global Solutions Engineering 总监。他是一位长期的 Netwrix 博主、演讲者和讲解员。在 Netwrix 博客中,Jeff 分享各种生活技巧,以及可以显著提升您系统管理体验的提示与技巧。