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

[玩转系统] Get-ADGroupMember:使用 PowerShell 快速查找 AD 用户

作者:精品下载站 日期:2024-12-14 13:16:14 浏览:15 分类:玩电脑

Get-ADGroupMember:使用 PowerShell 快速查找 AD 用户


PowerShell 的一个流行用途是与 Active Directory 目录服务 (AD) 配合使用。 PowerShell 可以使用 AD 对象执行许多节省时间的操作。使用 PowerShell Get-ADGroupMember cmdlet 和其他 cmdlet 可以节省大量时间。

Active Directory 组是划分用户帐户的好方法。组允许管理员定义跨多个系统的资源访问。

在本文中,我们将使用PowerShell获取AD组成员并导出AD组成员。然后,您可以使用此信息生成大量有趣的报告。

[玩转系统] Get-ADGroupMember:使用 PowerShell 快速查找 AD 用户

先决条件

如果您想按照本文进行操作,请确保您已准备好以下要求:

  • 在已加入域的 Windows 10 计算机上工作
  • 使用可以读取 AD 组和用户帐户的用户登录
  • 安装了 PowerShell Active Directory 模块

学习基础知识

要查询 AD 组和组成员,您可以使用两个 PowerShell cmdlet - Get-AdGroupGet-AdGroupMember

Get-ADGroup 查询域控制器并返回 AD 组对象。 Get-AdGroupMember 查看每个组的内部并返回该组中存在的所有用户帐户、组、联系人和其他对象。

获取AD组

要使用 PowerShell 查找 AD 组,您可以使用 Get-ADGroup cmdlet。如果没有参数,Get-ADGroup 将查询 AD 并使用 Filter 参数返回域中的所有组。 Filter 参数是必需的。它的存在是为了限制基于各种标准返回的组。

例如,要查找所有组而不考虑任何条件,请使用 Get-ADGroup 并为 Filter 参数指定通配符(星号)。您可以查看下面的示例。如果您的域中有数百甚至数千个组,则滚动浏览所有这些组可能需要一段时间。

Get-ADGroup -Filter *

如果您需要查找单个组,可以使用 Identity 参数。

Identity 参数是所有 Active Directory PowerShell cmdlet 中的通用参数。它允许您将查询限制为单个 AD 对象。例如,如果您需要检查名为 HR 的组是否存在,您可以通过运行以下命令来查找。

Get-ADGroup -Identity 'HR'

使用 Get-AdGroupMember 获取 AD 组成员

使用 PowerShell 列出 AD 组的成员需要 Get-ADGroupMember cmdlet。此 cmdlet 获取特定组中的用户、组和计算机对象。也许您需要找到管理员组的所有成员。在最简单的形式中,您只需再次使用 Identity 参数指定组的名称,如下所示。

Get-ADGroupMember -Identity 'Administrators'

请注意,Get-AdGroupMember 仅返回用户、组和计算机的组成员身份。它不会返回其他 AD 对象,例如联系人。

枚举组成员内的组成员

您可能知道,AD 组不仅可以包含用户帐户,还可以包含其他组(也称为嵌套)。当一个组嵌套在另一个组内时,该组的成员将继承分配给父组的相同权限。

默认情况下,PowerShell Get-AdGroupMember cmdlet 不返回嵌套组成员。要解决此问题,您可以使用 Recursive 参数。例如,您可以使用 Recursive 参数查找嵌套在 HR 组内的组成员,如下所示。

Get-ADGroupMember -Identity 'HR' -Recursive

一次获取多个组/成员

如果您需要一次查询 AD 中的许多不同组或组成员,您还可以使用 PowerShell foreach 循环来执行此操作。 foreach 循环为集合中的每个项目运行命令或代码。在这种情况下,该集合将是组名称的列表。

也许您需要查找 HR会计IT 组中的所有组成员。为此,您首先要创建这些组名称的集合或数组。下面的示例将此集合定义为 $groupNames。然后,对于该集合中的每个名称,运行 Get-ADGroupMember,将每个组的名称提供给 Identity范围。

$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
    Get-ADGroupMember -Identity $group
}

您也可以使用 ForEach-Object cmdlet 来循环组。

使用备用凭证

与许多其他 PowerShell cmdlet 一样,AD 组 cmdlet 具有一个 Credential 参数。默认情况下,每当您运行 AD 组 cmdlet 时,它都会使用您的登录凭据来查询 Active Directory。此行为表明您需要在已加入域的计算机上以具有权限的 Active Directory 用户身份登录。

但是,如果您使用的是工作组计算机或需要以其他用户身份向 AD 进行身份验证,该怎么办?在这种情况下,您可以使用 Credential 参数。此参数允许您指定用于身份验证的用户名和密码。

例如,您的用户帐户可能没有执行 AD 任务的权限。您拥有一个具有附加权利的服务帐户。您可以作为标准用户登录,但仍然使用服务帐户进行身份验证,如下所示。

Get-Credential cmdlet 提示输入用户名/密码以创建凭据。然后,此凭据将传递给 Get-AdGroup cmdlet 进行身份验证。

Get-ADGroup -Identity 'HR' -Credential (Get-Credential)

Credential 参数在 PowerShell 中无处不在,用于提供身份验证凭据。有关详细信息,请阅读使用 PowerShell Get-Credential cmdlet 和所有凭证。

使用 Get-ADGroup 获取组成员?

这听起来可能有悖常理,但您也可以使用 Get-ADGroup cmdlet 获取组成员。

事实证明,Get-ADGroup 为每个组返回一个名为 members 的属性。这是作为组成员的 AD 对象的集合。

例如,要在不使用 Get-ADGroupMember 的情况下再次查找该 HR 组中的组成员,您可以执行以下操作:

Get-ADGroup -Identity 'HR' -Properties members

为什么使用这种方法而不是其他方法?主要区别在于,members 属性包含所有类型的 AD 对象,而不仅仅是用户、计算机和其他组。

也许您在各个团体内部都有联系。当您运行 Get-ADGroupMember 时,这些联系人将不会显示。但是,如果您告诉 Get-ADGroup 返回该组中的所有成员并展开该集合,如下所示,您将看到联系人。

Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty members

查找特定的 AD 属性

在上面的基础知识部分中,您只是返回所有组和组成员。为每个组和组成员返回的信息只是与每种类型的对象关联的 AD 属性的子集。

也许您想查看用户帐户的电子邮件地址、上次登录日期或其他关联的 AD 属性?为此,您需要发挥创造力。

也许您能够找到 HR 组中的所有组成员,但还需要查看每个用户帐户的电子邮件地址?

$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}

过滤结果

到目前为止,您已经找到了所有群组和群组成员,但在日常工作环境中,您很少需要这样做。很有可能,您只需要找到每种物品的有限数量。 AD 组 cmdlet 有几种方法可以处理此问题。

过滤器参数

如前所述,这两个 cmdlet 都有 Filter 参数。此参数允许您以多种不同方式限制返回的内容,超出了本文的范围。

使用 Filter 参数,您可以按任何 AD 属性(例如名称、组类型、电子邮件地址、用户上次登录时间等)限制结果。

例如,也许您只想查找安全组。在这种情况下,您需要指定 GroupCategory 属性并设置条件以确保仅返回 Security 组。

Get-ADGroup -Filter 'GroupCategory -eq "Security"'

也许您想要查找所有安全组,但它们不能是域本地组。然后,您可以添加另一个条件(这次使用 -ne 运算符)以防止返回任何域本地组。

Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

如果您想了解如何创建查询过滤器,请务必查看学习 PowerShell 中的 Active Directory 和 LDAP 过滤器。

按组织单位 (OU) 限制组结果

也许您有嵌套在 OU 中的各种组。您不一定要查找所有组,而只想查找特定 OU 中的组。在这种情况下,您可以使用 SearchBase 参数。

SearchBase 参数允许您指定 OU 的专有名称 (DN) 以开始搜索组。例如,您的根目录下可能有一个名为 Locations 的 OU。领域。在位置 OU 中,您创建了每个位置 OU,例如奥斯汀纽约洛杉矶。您仅在 NYC OU 中查找群组,并且需要限制查看其他群组。

下面显示了 AD OU 结构示例。请注意,其他组存在于 Locations OU 之外。

company.local
- Locations
  - Austin
  - NYC
    - Group 1
    - Group 2
  - Los Angeles
- Computers
  - Group 3
  - Group 4
- Service Accounts

也许您需要查找仅位于 NYC OU 中的所有 AD 组。要限制查询,您可以使用 SearchBase 参数提供 DN,如下所示。返回位置 OU 内的所有组。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'

但现在您需要在 Locations OU 下的所有 OU 中查找所有组。 Get-ADGroup 仅返回 Locations OU 本身中的组,而不是子 OU 中的组。

要返回子 OU 内的组,您需要使用 SearchScope 参数。此参数类似于 Recursive 参数,因为它也会检查子对象。

例如,要查找 Locations OU 下的任何 OU 中的所有组,请指定 Subtree2SearchScope 的此值告诉 Get-ADGroup 递归地查看所有子级、孙级和下游 OU。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2

有关 SearchScope 参数选项的完整详细信息,请参阅 Get-ADGroup 文档。

导出 AD 组和成员

这样你终于知道如何查询并返回你需要的组和组成员了。所有这些信息都会发送到 PowerShell 控制台。但现在您需要将此信息放入 CSV 文件或 Excel 工作表中。

您现在唯一需要做的就是将所有这些信息发送到文件中。

导出到 CSV

将 AD 信息导出到的一种流行格式是 CSV。 PowerShell 有一个方便的 cmdlet,可让您轻松地从 PowerShell 输出创建 CSV 文件,称为 Export-Csv

您可以通过将本文介绍的任何命令通过管道传输到 Export-Csv 来创建 CSV 文件。使用下面的示例,会将 Get-AdGroup 返回到控制台的所有输出重定向到 CSV 文件。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformation

有关此便捷 cmdlet 的更多信息,请查看 Export-Csv:将 CSV 文件视为一等公民的 PowerShell 方式。

您还可以通过 Get-AdGroupMember cmdlet 轻松将结果导出到 CSV。

导出到 Excel

PowerShell 没有将信息导出到 Excel 的本机方法。但是,您始终可以下载名为 ImportExcel 的免费社区模块。该模块将类似 CSV 的导出功能直接引入到 Excel 工作表中。要安装 PowerShell 模块,请运行 Install-Module ImportExcel -Scope CurrentUser

使用上面的示例,您需要将组导出到 Excel 工作表,而不是 CSV 文件,您可以使用 Export-Excel cmdlet,如下所示。

通过检查 NCSC 密码列表来查找 Active Directory 中泄露和不安全的密码。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'

ImportExcel 模块具有大量与 Excel 配合使用的功能。如果您需要更精美的工作表,它可能有适合您的功能。

有关使用 ImportExcel 模块的更多信息,请阅读本文。它很好地介绍了它可以处理的一些常见用例。

结论

只需使用两个 PowerShell cmdlet,您就可以对 AD 组执行几乎任何操作。本文只是对您可用的功能的介绍。使用此处收集的知识,点击文章中的一些链接进行更深入的主题探讨,看看您可以构建什么!

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

取消回复欢迎 发表评论:

关灯