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

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

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

Get-ADObject:使用 PowerShell 报告 Active Directory


您是否正在寻找使用 PowerShell 快速创建 Active Directory (AD) 报告的方法?您来对地方了!在本文中,您将了解如何使用 Get-ADObject cmdlet 在 AD 环境中创建用户帐户的自定义报告。

想象一下,您在一家初创公司工作,并了解到该公司获得了投资者的资助,通过雇用新员工担任多个职位来发展公司。您的经理要求您向她提供每个办公室的人数报告,以确保工作场所有足够的办公空间。

通常,您可以使用安装在台式计算机上的Active Directory 用户和计算机 (ADUC) 应用程序控制台手动查看 AD 帐户。但是,使用 ADUC 每位新员工平均需要一分钟来查看每个 AD 帐户的信息。

您快速在 Internet 上搜索一些选项,发现可以使用名为 Get-ADObject 的 PowerShell cmdlet 自动收集 AD 报告数据。在本文中,您将了解 Get-AdObject PowerShell cmdlet 的作用以及如何正确使用这个方便的 AD PowerShell cmdlet 自动创建报告。

先决条件/要求

本文将演练如何使用 Get-ADObject。如果您打算遵循,请确保满足以下先决条件:

  • 以具有查询AD用户权限的用户身份登录已加入域的Windows 10 PC
  • 在 Windows Server 2016 或更高版本的 Active Directory 环境中。您将在本文中使用的实验室名为 mylab.local
  • 远程服务器管理工具 (RSAT) 包

快速提示:如果您尚未安装 RSAT 并且使用的是最新版本的 Windows 10,则可以使用 PowerShell 命令Install-WindowsFeature -Name RSAT-AD-PowerShell 快速安装它.

Get-ADObject:它的选项和参数

Get-ADObject cmdlet 的主要用途是连接到 AD 域控制器或轻量级目录服务 (LDS) 服务器并返回有关各种 Active Directory 对象的信息。

要查询 AD 对象,Get-ADObject cmdlet 有许多参数,允许您连接到不同的域控制器、搜索全局目录、通过备用凭据进行身份验证,还可以指定 LDAP 过滤器并限制由搜索库的范围。

请注意,默认情况下,Get-ADObject cmdlet 将仅返回一组 1000 个 AD 对象。覆盖此配置的最佳方法是使用 ResultSetSize 参数指定要返回的最大对象数。如果要接收所有对象,请将此参数设置为 $Null(空值)。然后就可以使用Ctrl+C来停止对象的查询和返回。

有关Get-ADObject参数的更多信息,请查看Get-ADObject帮助文档。

学习项目大纲

本文将教您如何将 Get-ADObject PowerShell cmdlet 应用到实际场景中。您将通过介绍性段落中解释的场景来学习。

场景

在本文中,您将学习如何使用 Get-ADObject 生成两份报告并发送给您的经理。第一份报告将详细列出每个部门的所有用户帐户。老板想要每个部门都有单独的 CSV 文件。第二个任务将查询特定 OU 及其子 OU 中的所有禁用用户帐户。

在本文结束时,您将能够生成如下所示的 CSV 文件:

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

广告环境

您将在本文中使用的 Active Directory 组织单位 (OU) 结构如下所示。您可以看到我们有一个父部门 OU 和三个子 OU,分别为会计营销IT。每个子 OU 内部都有两个孙 OU,分别称为“用户”和“计算机”。

  • 部门 (OU)
    - 会计 (OU)
    - 用户
    - 计算机
    - 营销(嵌套 OU)
    - 用户
    - 计算机
    - IT(嵌套 OU)
    - 用户
    - 计算机

快捷方式:您可以使用 New-ADOrganizationalUnit PowerShell cmdlet 构建这些 OU。如需快速完成此工作的脚本,请查看 Create-OU-Structure.ps1 脚本。

您还将使用位于每个用户 OU 内的数十个不同的 AD 用户帐户,如下所示。这些名字是随机选择的。

  • 会计(accountant_user1-5
  • 营销(market_user_user1-5
  • IT(it_user1-5

快捷方式:如果您想在上述 OU 内快速创建这些用户帐户,请下载并运行 Populate-AD_Accounts.ps1 脚本。

使用 Get-ADObject 创建 Active Directory 报告

关于 Get-ADObject 的介绍和背景信息已经足够了。让我们最终开始了解这个 PowerShell cmdlet 在现实世界中的工作原理!

在第一个示例中,您的任务是向经理提供一个 CSV 文件,其中包含会计、营销和 IT 部门 OU 中存在的所有用户帐户的报告。

了解过滤器参数

Get-ADObject PowerShell cmdlet 唯一必需的参数是 Filter。这是一个参数,是限制返回对象数量的一种方法。由于它是必需参数,因此即使您想使用通配符 (*) 返回所有对象,也必须定义它。这告诉 Get-ADObject 返回所有对象。

使用 Filter 参数的最简单示例是返回整个 AD 域中的所有对象,如下所示。

PS51> Get-ADObject -Filter *

在本文中,您将看到 Filter 参数用于返回所有对象并限制返回对象的范围。

有关 Filter 参数语法的更多信息,请在 PowerShell 控制台中运行 Get-Help about_ActiveDirectory_Filter

使用 SearchBase 参数限制搜索范围

您正在使用的示例是 Get-ADObjectSearchBase 参数的完美用例。 SearchBase 参数允许您通过将范围限制为特定 OU 来限制搜索查询,从而限制通过 Get-ADObject 返回的对象。

通过限制范围,可以排除 AD 中的其他 OU,并仅定位与检索所需数据相关的特定 OU,从而减少 Get-ADObject 运行所需的时间。

SearchBase 参数值通过专有名称 (DN) 定义,格式为 OU=,DC=,DC=。例如,要仅在名为 mylab.local 的域中查找 Department OU 中的对象,DN 将类似于 OU=Department,DC=mylab,DC =本地

在此示例中,提取父部门 OU 和所有子 OU 中的所有 AD 用户,如下所示。这将返回部门 OU 和所有子 OU 中的所有 用户。

PS51> Get-ADObject -Filter * -SearchBase 'OU=Department,DC=mylab,DC=local'

利用过滤器参数

截至目前,您可以查询部门 OU 和所有子 OU 中的所有用户对象。但目前还不需要这样做。相反,我们首先提取所有会计用户。一种方法是实际使用 Filter 参数,而不仅仅是提供通配符值。

要限制结果,请使用 Department -eq 'Accounting'Filter 值。这会将结果限制为仅部门 OU 中 AD 部门属性设置为“会计”的对象。

您可以在下面看到您将所有对象存储在 $accounting_users 变量中。这个稍后会用到。

PS51> $accounting_users = Get-ADObject -SearchBase 'OU=Department,DC=mylab,DC=local' -Filter {Department -eq "Accounting"}

将 AD 对象输出到 CSV 文件

现在 $accounting_users 包含所有适用的对象,您可以仅将每个对象的 NameDepartment 属性通过管道传输到 Export -Csv cmdlet。此 cmdlet 创建一个新的 CSV 文件并将每个 AD 对象存储为一行。

PS51> $accounting_users | Select-Object -Property Name,Department | Export-Csv -NoTypeInformation -Path C:\users$env:username\Desktop\report_accounting_users.csv

现在,您的桌面上应该有一个名为 report_accounting_users.csv 的 CSV 文件,如下图所示。

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

收集其他用户对象

现在您已经了解了如何使用 Get-ADObject 查找 AD 用户的基础知识,可以对其进行扩展以查找其他部门的用户对象。您将使用与以前相同的一般概念。

首先,找到旧金山办事处的所有 AD 用户。

#Get report of all department users that work in the San Francisco Office
$sf_users = Get-ADObject -SearchBase 'OU=Department,DC=mylab,DC=local' -Filter { physicalDeliveryOfficeName  -eq 'San Francisco' } -Properties Name,physicalDeliveryOfficeName,Department
$sf_users | Select Name,physicalDeliveryOfficeName,Department | Export-Csv -NoTypeInformation -Path C:\users$env:username\Desktop\report_sanfrancisco_office_users.csv

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

接下来,查找在佛罗里达州办事处工作的所有用户。此示例有点不同,因为您使用的是 Select-Object cmdlet 的计算属性。这允许您将对象属性名称从来自 Get-ADObject 的简单 st 转换为更具描述性的 State

#Get report of all department users that work in the Florida Office
$fl_users = Get-ADObject -SearchBase 'OU=Department,DC=mylab,DC=local' -Filter { St -eq 'FL' } -Properties Name,St
$fl_users | Select-Object -Property Name,@{N='State'; E={$_.st}} | Export-Csv -NoTypeInformation -Path C:\users$env:username\Desktop\report_florida_state_users.csv

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

最后,收集所有 IT 用户。这次,不使用 Department AD 属性,而是使用 Filter 参数来查找名称以 it 开头的所有对象。

#Get report of all select department users that have a name that contains "user"
$select_users = Get-ADObject -SearchBase 'OU=Department,DC=mylab,DC=local' -Filter {Objectclass -eq 'user' -and name -like 'it*'} -Properties Name,Department,st
$select_users | Select-Object -Property Name,Department,@{N=’State’; E={$_.st}} | Export-Csv -NoTypeInformation -Path C:\users$env:username\Desktop\report_select_users.csv

注意:您还可以使用 Get-AdUser cmdlet,而不是在上一示例中使用 objectClass -eq 'user'

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

使用 LDAP 过滤器查找禁用帐户

在前面的示例中,您使用 Filter 参数来限制 Get-ADObject 返回的对象。另一种方法是使用 LDAPFilter 参数。此参数执行相同的任务,但允许您通过 LDAP 查询搜索字符串指定过滤器。 LDAPFilter 参数被认为是搜索 Active Directory 的更高级选项。

现在让我们创建一个报告,使用 LDAPFilterSearchBase 参数来定位特定 OU,以查找组织中的所有禁用用户。

useraccountcontrol:1.2.840.113556.1.4.803:=2 设置是为 Active Directory NTDS 数据库中的所有禁用用户指定的 AD 属性。这是 AD 标记不活动帐户(登录被禁用)的一种方法。以下是更多您可能会觉得有用的 LDAP 查询示例。

您可以在下面看到我们使用的 LDAP 查询字符串 (&(objectclass=user)(objectcategory=user)(useraccountcontrol:1.2.840.113556.1.4.803:=2))。虽然复杂,但它能很好地完成工作。要了解 LDAP 查询搜索字符串,请查看揭秘 Active Directory 和 LDAP 搜索字符串。

下面的命令运行用于仅显示禁用用户的 LDAP 筛选器参数,然后使用 Export-CSV cmdlet 创建报告,就像您之前所做的那样。

$disabled_users = Get-ADObject -LDAPFilter "(&(objectclass=user)(objectcategory=user)(useraccountcontrol:1.2.840.113556.1.4.803:=2))" -SearchBase 'OU=Department,DC=mylab,DC=local'  
$disabled_users | Select-Object -Property Name | Export-Csv -NoTypeInformation -Path C:\users$env:username\Desktop\report_disabled_users.csv

[玩转系统] Get-ADObject:使用 PowerShell 报告 Active Directory

最终结果

现在,您的桌面上应该有五个 CSV 文件可供您的经理使用!

  • report_accounting_users.csv
  • report_sanfrancisco_office_users.csv
  • report_florida_state_users.csv
  • report_select_users.csv
  • report_disable_users.csv

概括

在本文中,您了解了如何使用 Get-ADObject PowerShell cmdlet 搜索 Active Directory。

接下来是什么?

为了进一步加深您所学到的知识,可以通过将数据导出到数据库来将生成 AD 报告的过程提升到一个新的水平。进入数据库后,您可以使用定制网站或 Microsoft SharePoint 等应用程序访问 AD 报告数据。这只是一个想法。还有无数其他的!

搜索 Active Directory 的能力是许多组织所需的一项基本技能,并且最终将为您和您的团队节省数小时的时间。

进一步阅读

  • Active Directory 脚本丰富:快来获取吧!

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

取消回复欢迎 发表评论:

关灯