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 组相关:
- 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
创建组最简单的方法是运行这个简短脚本:
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
如果要创建通用的分发组,只需将 –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
如果你需要将用户添加到另一个安全或分发组(例如 “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}
将用户从一个组复制到另一个组
如果要将一个组中的所有成员复制到另一个组,请运行以下脚本:
Get-ADGroupMember “Quality” | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “QualityControl” -Members $_}
从组中移除用户或计算机
要从组中移除用户,请使用以下 Remove-ADGroupMember cmdlet:
Remove-ADGroupMember -Identity Quality -Members J.Robinson
要从组中移除计算机帐户,请在计算机名称末尾加上美元符号($),以作为 -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
}
请注意,用户将失去除“Domain Users”以外的所有组成员资格;如果需要,可以手动移除“Domain Users”。
Active Directory 组的报表
既然我们已经知道如何使用 PowerShell 执行许多与组相关的常见 Active Directory 管理任务,让我们看看如何报告 AD 中存在哪些组:
要列出 AD 中的所有组,请使用下面的脚本:
Get-ADGroup -filter * -properties GroupCategory | ft name,groupcategory
当然,您还需要查看 AD 组成员以及 AD 组成员身份的变更。以下是执行这些更复杂任务的操作说明链接:
结论
既然你已经学会了如何使用 PowerShell 脚本在 Active Directory 中管理组及组成员关系,试着自己完成一些组管理任务吧。不过请务必小心,并且不要忘记 启用 Active Directory 回收站(Recycle Bin)功能 ,这样如果出现问题,你就可以轻松回滚更改。记住,ADUC MMC 管理单元非常适合管理组及组成员关系,但当需要批量管理组时,PowerShell 要好得多。
分享到
了解更多
关于作者
Jeff Melnick
系统工程总监
Jeff 是 Netwrix 的前 Global Solutions Engineering 总监。他是一位长期的 Netwrix 博主、演讲者和讲解员。在 Netwrix 博客中,Jeff 分享各种生活技巧,以及可以显著提升您系统管理体验的提示与技巧。