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

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

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

如何将 Active Directory 用户导出到 CSV 并构建报告


对于许多 Active Directory (AD) 管理员来说,从 AD 检索用户是 PowerShell 的入口点。 PowerShell 是一个用于询问系统的强大工具,Active Directory 也不例外。使用 PowerShell 搜索并返回 AD 用户仅仅是开始。让我们更进一步,将 Active Directory 用户导出到 CSV!

在本教程中,您将学习如何使用 PowerShell 执行一些基本的 AD 查询并创建方便的报告。使用 PowerShell,您将学习通过重命名列、合并文本字段以及执行计算来格式化输出以开发有价值的报告。

先决条件

本教程将是一个实践演示。如果您想继续操作,请确保您具备以下条件:

  • 使用域用户登录加入 AD 的计算机。
  • PowerShell - 本教程使用 PowerShell 版本 7.1.4,但任何版本的 PowerShell 都应该可以使用。
  • Windows 远程系统管理工具 (RSAT)

熟悉 Get-ADUser PowerShell Cmdlet

在创建报告之前,您必须首先弄清楚如何找到您想要将 Active Directory 用户导出到 CSV 的 AD 用户。为此,您将使用 Get-ADUser cmdlet。 Get-ADUser cmdlet 是 PowerShell ActiveDirectory 模块附带的 PowerShell cmdlet。

打开 PowerShell 控制台并使用 Filter 参数和 * 参数运行 Get-ADUser cmdlet。将星号与 Filter 参数结合使用可告知 Get-ADUser 返回所有 AD 用户。稍后您将创建更复杂的过滤器。

Get-ADUser -Filter *

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

默认情况下,Get-ADUser cmdlet 将返回以下属性:

  • DistinguishedName - 用户对象的完整 LDAP 名称。
  • Enabled - 用户是否已启用,true 或 false。
  • GivenName - 用户的名字。
  • 名称 - 用户的全名。
  • ObjectClass - AD 对象的类型。
  • ObjectGUID - AD 对象的 ID。
  • SamAccountName - 这是 Windows NT4.0 之前的登录名
  • SID - 另一种类型的对象 ID。
  • Surname - 用户的姓氏。
  • UserPrincipalName - 用户的登录名。

在您的报告中,您可能不需要所有这些属性。默认情况下,Get-ADUser 还会返回内置域管理员和来宾帐户。您几乎肯定想排除这些。您将在以下部分中了解如何操作。

使用 SearchBase 参数将搜索限制为 OU

AD 用户有时可能分布在数十个组织单位 (OU)。有时,您需要将搜索限制为仅特定的 OU。为此,您可以使用 SearchBase 参数。 SearchBase 参数允许您指定单个 OU 作为搜索用户的起点。

例如,也许您有一个 ATA-Users OU,其中包含各个部门 OU,如下所示。部门 OU 包含您想要包含在导出到 CSV 中的所有用户帐户。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

您可以将 SearchBase 参数定义为 ATA-Users OU 的专有名称 (DN),如下所示,以将搜索限制为 ATA-Users OU 及其内部的所有 OU。

Get-ADUser -Filter * -SearchBase "OU=ATA-Users,DC=ATA,DC=local"

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

上面的输出为每个用户显示了许多不同的属性,但让我们稍微限制一下,仅显示您可能感兴趣的属性。为此,请仅使用 Select-Object cmdlet 返回NameUserPrincipalName 属性。

Get-ADUser -Filter * -SearchBase "OU=ATA-Users,DC=ATA,DC=local" | select Name,UserPrincipalName

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

也许您只想将 Active Directory 用户导出到 Sales OU 中的 CSV。为此,请在 SearchBase 参数中指定 Sales OU,如下所示。

Get-ADUser -Filter * -SearchBase "OU=Sales,OU=ATA-Users,DC=ATA,DC=local" | select Name,UserPrincipalName

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

Get-ADUser 过滤 AD 用户帐户

到目前为止,您已经通过简单地指定星号来返回所有用户来忽略 Filter 参数。但如果您只需要查询符合特定条件的某些用户,那么 Filter 参数就是您的好帮手。

假设您希望最终将所有 Active Directory 用户导出到 ATA-Users OU 内的 CSV 中,但前提是他们的 Department AD 属性设置为 Sales就像下面的示例用户帐户一样。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

使用 Get-ADUser 上的 Filter 参数指定 AD 属性 (Department),运算符 -eq 等于“等于”和 Department 属性 (Sales) 的值。

Get-ADUser -Filter {Department -eq "Sales"} -SearchBase "OU=ATA-Users,DC=ATA,DC=local"| select Name,UserPrincipalName

如果 ATA-Users OU 中的用户的 Department 属性设置为 Sales,则 Get-ADUser 将仅返回这些用户。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

也许您想在输出中包含 Department 属性。为此,您通常需要将 Department 属性指定为另一个属性,以通过 Select-Object (select) cmdlet 显示,如下所示以下。但请注意 Department 属性没有显示。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

默认情况下,Get-ADUser cmdlet 不会返回所有属性。要返回所有非默认属性,您必须使用 Properties 参数。在本例中,请告诉 Get-ADUser 返回 Department 属性。

Get-ADUser -Filter {Department -eq "Sales"} -SearchBase "OU=ATA-Users,DC=ATA,DC=local" -Properties Department | select Name,UserPrincipalName

现在您已经有了一个基本的过滤器,您可以根据需要继续向 Filter 添加更多条件,并将它们与 PowerShell andor 结合起来运营商。例如,下面的 Get-ADUser 将返回位于 SalesFinance 部门的所有启用的 AD 用户。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

在本教程的环境中,Steve James 是 Sales 部门的帐户,但他的帐户未启用,因此他的帐户不会通过上面的命令显示。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

将 Active Directory 用户导出到 CSV

您现在已经掌握了使用 PowerShell 检索 AD 用户的基础知识。最后一步是将这些 Active Directory 用户导出到 CSV 文件以创建可以共享的报告。

假设您已经构建了 Get-ADUser 命令,并且它返回您想要包含在 CSV 报告中的用户,如下所示。

这个命令:

  1. 检索 ATA-Users OU 和所有子 OU 中的所有 AD 用户。
  2. 输出额外的属性,例如 DepartmentPasswordLastSetPasswordNeverExpires
  3. 限制通过 Select-Object 返回的属性包含在报告中,例如 NameUserPrincipalNameDepartment 以及任何以 Password 开头的属性。

请注意此示例中的密码*。在 Select-Object 中使用星号会告诉 Select-Object 返回以 password 开头的所有属性。

Get-ADUser -Filter * -SearchBase "OU=ATA-Users,DC=ATA,DC=local"  -properties Department,PasswordLastSet,PasswordNeverExpires | Select-Object Name,UserPrincipalName,Department,password*

要导出 Active Directory 用户,此命令将返回 CSV,将对象通过管道传送到 Export-Csv cmdlet。 Export-Csv cmdlet 是一个 PowerShell cmdlet,允许您将各种对象发送到(本示例中为 AD 用户帐户),然后将这些对象附加为 CSV 行。

要导出上述命令中返回的每个 AD 用户,请附加 | Export-Csv .csv 到末尾。此操作通过管道传输 Select-Object 返回的所有对象,并将它们“转换”为 CSV 文件。

Get-ADUser -Filter * -SearchBase "OU=ATA-Users,DC=ATA,DC=local"  -properties Department,PasswordLastSet,PasswordNeverExpires | Select-Object Name,UserPrincipalName,Department,password* | Export-CSV pass_report.csv

您将在下面看到 Export-Csv 创建一个名为 pass_report.csv 的 CSV 文件,其中包含作为对象属性名称的标头以及每个 AD 用户帐户一行。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

使用 Select-Object 自定义 CSV 标头

您现在可以生成的报告包含所有必需的信息,但 CSV 标头在语法上不正确并且可能会产生误导。经理可能不知道 UserPrincipalName 是什么,并且列标题包含多个单词且不含空格是良好的英语。

要将 Active Directory 用户导出到 CSV 并创建自定义 CSV 标头,请使用 Select-Object cmdlet 的计算属性。计算属性功能是您定义自定义属性名称和值的一种方式。

Select-Object cmdlet 的计算属性功能要求您定义一个包含两个键/值对的哈希表; Name 表示属性的名称,Expression 表示操作原始对象属性值的代码或只是实际的属性名称。

在此示例中,假设您希望 CSV 显示以下标题名称:

  • 登录名而不是UserPrincipalName
  • 密码上次设置日期而不是PasswordLastSet
  • 密码永不过期而不是PasswordNeverExpires
  • 密码上次设置日期,而不是用短日期表示的 PasswordLastSet

要进行这些更改,您首先需要为每个属性构建一个哈希表,如下所示。

@{Name="Login Name";Expression="UserPrincipalName"}
@{Name="Password Last Set Date";Expression="PasswordLastSet"}
@{Name="Password Never Expires";Expression="PasswordNeverExpires"}
@{Name="Password Last Set Date";Expression={$_.PasswordLastSet.ToShortDateString()}}

现在您已经有了哈希表,将它们添加到您提供给 Select-Object cmdlet 的属性列表中,就像典型的属性名称一样。

Select-Object cmdlet 的 Property 参数接受一个数组。如果您有许多属性要传递,您可以先创建一个数组,然后将该数组传递给 Property 参数,以便于阅读。

$properties = @(
	Name,
	@{Name="Login Name";Expression="UserPrincipalName"},
	Department,
	@{Name="Password Last Set Date";Expression="PasswordLastSet"},
	@{Name="Password Never Expires";Expression="PasswordNeverExpires"},
	@{Name="Password Last Set Date";Expression={$_.PasswordLastSet.ToShortDateString()}}
)
Select-Object -Property $properties

Get-ADUser 与上面创建的新 Select-Object 结构相结合,即可得到以下代码片段。

$properties = @(
	Name,
	@{Name="Login Name";Expression="UserPrincipalName"},
	Department,
	@{Name="Password Last Set Date";Expression="PasswordLastSet"},
	@{Name="Password Never Expires";Expression="PasswordNeverExpires"},
	@{Name="Password Last Set Date";Expression={$_.PasswordLastSet.ToShortDateString()}}
)
Get-ADUser -Filter * -SearchBase "OU=ATA-Users,DC=ATA,DC=local" -Properties Department,PasswordLastSet,PasswordNeverExpires | Select-Object -Property $properties | Export-CSV pass_report.csv

完成后,PowerShell 将为您创建一个 CSV 文件,如下例所示。

[玩转系统] 如何将 Active Directory 用户导出到 CSV 并构建报告

结论

PowerShell 是用于报告 Active Directory 用户的强大工具。本教程向您展示了如何根据各种条件查找和过滤用户,并仅使用几行代码从该输出创建 CSV 文件。

现在您已经掌握了查询 AD 用户并将 Active Directory 用户导出到 CSV 的基础知识,您认为自己在日常工作生活中会在哪些方面使用这些知识?

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

取消回复欢迎 发表评论:

关灯