当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户

作者:精品下载站 日期:2024-12-14 03:41:46 浏览:17 分类:玩电脑

Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户


Active Directory 组允许您轻松向用户分配权限或软件。但是如何获得一个组的所有成员呢?要导出或更新 ADGroup 的所有用户,我们可以使用 PowerShell 中的 Get-ADGroupMember cmdlet

您当然也可以查看 Active Directory 中的组成员,但您可能已经注意到,这非常不方便。使用 PowerShell 获取所有组成员的优点是您可以轻松地将其导出到 Excel 等,或在其他脚本中使用结果。

在本文中,我们将了解如何在 PowerShell 中使用 Get-ADGroupMember cmdlet。

要求

Get-ADGroupMember cmdlet 是 PowerShell Active Directory 模块的一部分。该模块默认安装在域控制器上。不过,我建议在您自己的计算机上安装该模块,这样您就不必在域控制器上工作。

查看本文以在您的计算机或服务器上安装 PowerShell Active Directory 模块。

使用 Get-ADGroupMember 获取所有组成员

Get-ADGroupMember 命令将获取该组成员的所有对象。这可以是用户、计算机以及其他(嵌套)组。要简单地列出组的所有成员,我们可以在 PowerShell 中使用以下命令:

# Replace SG_M365_E3 with your group name
Get-ADGroupMember -Identity SG_M365_E3 | ft

这将列出组 SG_M365_E3 的所有成员,并将其格式化为表格 (ft)。

[玩转系统] Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户

在大多数情况下,所有组成员的简单列表并不是您想要的。您可能想要获取更多用户详细信息,例如所有用户的电子邮件地址或显示名称。

为此,我们可以简单地在其后面传递 Get-ADuser cmdlet,向组中的每个用户请求我们需要的所有详细信息:

Get-ADGroupMember -Identity SG_M365_E3 | Get-ADUser -Properties DisplayName,EmailAddress | Select Name,DisplayName,EmailAddress,SAMAccountName

[玩转系统] Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户

您可以在 Get-ADUser cmdlet 中选择所需的任何属性,但请确保将其也添加到 cmdlet 的 select add 末尾。

嵌套组

嵌套组是 Active Directory 中的常见做法。它们允许您根据用户的组成员身份向用户分配权限或策略。让我们以以下示例为例,我们将 PowerBi 分配给销售管理和管理委员会:

[玩转系统] Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户

要获取有权访问 PowerBi 的实际用户,我们不能简单地执行 Get-ADGroupMember ,因为这只会返回两个组:

[玩转系统] Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户

我们想要的是获取两个嵌套组的成员。为此,我们可以使用 -recursive 参数。这样,Get-ADGroupMember cmdlet 还将遍历 Active Directory 中的所有嵌套组。

Get-ADGroupMember -Identity SG_M365_PowerBi -Recursive | ft

[玩转系统] Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户

仅获取用户、计算机或嵌套组

当您的组中混有用户、计算机或嵌套组时,您可能只想获取该组中的用户。或者仅其他嵌套组。

为此,我们可以过滤组成员的 objectClass 上的结果。这可以是:

  • 用户
  • 电脑
  • 团体
# Get only the users from a group
Get-ADGroupMember -Identity SG_PowerBi | Where-Object {$_.objectClass -eq "user"} | ft

# Or get only the nested groups
Get-ADGroupMember -Identity SG_PowerBi | Where-Object {$_.objectClass -eq "group"} | ft

使用 PowerShell 将组成员导出到 CSV

大多数时候,当我使用 Get-ADGroupMember cmdlet 时,我希望将结果导出到 Excel。为此,我们可以在 PowerShell 中使用 Export-CSV cmdlet。这会将 PowerShell cmdlet 的所有结果导出到 CSV 文件。

建议

您还可以使用 PowerShell ImportExcel 模块直接导出到 Excel

假设我们要将 SG_M65_E3 组的所有成员及其电子邮件地址导出到 Excel:

Get-ADGroupMember -Identity SG_M365_E3 | Get-ADUser -Properties DisplayName,EmailAddress | Select Name,DisplayName,EmailAddress,SAMAccountName | Export-CSV -Path c:\temp\M365E3-users.csv -NoTypeInformation

这会将结果导出到 CSV 文件并将其存储在 C:\Temp 中。 -NoTypeInformation cmdlet 从 CSV 文件中删除该标头信息。如果您想了解有关导出到 CSV 的更多信息,请务必阅读本文。

超出此请求的大小限制错误

当您处理包含超过 5000 名成员的大型群组时,您可能会收到错误超出此请求的大小限制错误。出现此错误的原因是 Active Directory Web 服务默认返回限制为返回 5000 个项目。

我们可以通过两种方法解决这个问题。我们可以更改 Active Directory Web 服务的配置来增加限制。或者我们可以使用 Get-ADGroup cmdlet。此 cmdlet 不受限制。

使用 Get-ADGroup cmdlet

如果问题只是偶尔发生,则 Get-ADGroup cmdlet 可能是获取成员的最简单方法。我们可以简单地获取组并展开成员属性来查看组的所有成员。

Get-ADGroup "SG_M365_E3" -Properties Member | select -ExpandProperty member

如果您想了解有关用户的更多信息,那么我们可以在后面通过管道传递 Get-ADUser cmdlet,就像我们之前使用 Get-ADGroupMember cmdlet 所做的那样:

(Get-ADGroup "SG_M365_E3" -Properties Member).Member | Get-ADUser -Properties DisplayName,EmailAddress | Select Name,DisplayName,EmailAddress,SAMAccountName

增加限制

如果您经常需要检索大型组,那么增加限制可能是更好的主意。为此,您需要有权访问域控制器。

  1. 在资源管理器中导航至C:\Windows\ADWS
  2. 使用记事本打开Microsoft.ActiveDirectory.WebServices.exe.config
  3. 行和 行之间添加以下代码
<!--Specifies the maximum number of group members (recursive or non-recursive), group memberships, and authorization groups that can be retrieved by the Active Directory module Get-ADGroupMember, Get-ADPrincipalGroupMembership, and Get-ADAccountAuthorizationGroup cmdlets. 
Set this parameter to a higher value if you anticipate these cmdlets to return more than 5000 results in your environment.-->

<add key="MaxGroupOrMemberEntries" value="50000"/>

文件的结果应该是这样的:

[玩转系统] Get-ADGroupMember - 使用 PowerShell 获取 ADGroup 中的所有用户

保存文件后,您需要重新启动 Active Directory Web Services 服务。您可以使用下面的 PowerShell 命令,或者在服务管理控制台中重新启动服务。

Restart-Service -name ADWS

总结

正如您所看到的,使用 Get-ADGroupMember 获取组中的所有成员非常容易。当您有嵌套组时,请确保使用 -recursive 参数。

当您想要将组成员导出到 Excel 时,请确保尝试使用 ImportExcel 模块。该模块允许您直接从 PowerShell 创建格式化的 Excel 文件。

如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯