如何使用 Get-ADUser PowerShell cmdlet

Get-ADUser cmdlet 是管理员在处理 AD 时最常用的 PowerShell cmdlet 之一。此 cmdlet 允许您查询并获取所有 AD 用户及其特定属性,并应用筛选器以根据组织单位(OU)、组成员身份或属性查找特定的 AD 用户。本文通过实际示例说明如何使用 Get-ADUser cmdlet,包括高级筛选技术、属性选择等内容。本文还将该 cmdlet 与 AD user reports 中的 ADManager Plus 直接进行比较,后者是一款 AD reporting tool

获取 AD 用户:PowerShell 与 ADManager Plus 对比

了解基于脚本的 PowerShell 方法与 ADManager Plus 中简单的 GUI 报告功能的区别。

Windows PowerShell

开始之前,请确保您已具备:

  • 已安装 Active Directory PowerShell 模块。
  • 已配置正确的 PowerShell 执行策略。
  • 您使用的账户对您打算查询的 AD 域具有读取权限。

使用 PowerShell 获取所有 AD 用户:

  1. Open Windows PowerShell as the administrator and execute the following script:
    Get-ADUser -Filter *

使用不同参数结合 Get-ADUser cmdlet 生成更细粒度的用户报告。

ADManager Plus

使用 ADManager Plus 获取所有 AD 用户:

  1. 登录 ADManager Plus。
  2. 导航至 Reports > User Reports > General Reports > All Users.
  3. 选择所需的域。
  4. 点击 Generate.

Get-ADUser 参数

以下是一些可与 Get-ADUser cmdlet 一起使用的常用参数:

参数 描述
-Identity 此参数指定通过 sAMAccount Name、DN、GUID 或 SID 检索单个用户。
-Filter 此参数基于查询查找用户。使用 * 可查找所有用户。
-Properties 此参数指定要检索的其他用户属性。
-SearchBase 限制搜索范围到特定的 OU 或容器路径。
-SearchScope 定义搜索深度(Base、OneLevel 或 Subtree)。默认值为 Subtree。
-ResultSetSize 设置查询返回的最大用户数。使用 $null 表示无限制。
-Server 指定运行查询的域控制器(DC)。
-LDAPFilter 使用更复杂的 LDAP 查询语法查找用户,而非 PowerShell 过滤器。
-Credential 使用不同用户账户的凭据运行命令。

Get-ADUser 筛选示例脚本及用例

示例 1:获取单个用户及其所有属性

要检索特定用户的信息,请使用 -Identity 参数。您可以通过 sAMAccountName、DN、GUID 或 SID 来标识用户:

#Get user by sAMAccountName
Get-ADUser -Identity "jdoe"
#Get user by UPN
Get-ADUser -Identity "john.d@company.com"
#Get user by DN
Get-ADUser -Identity "CN=John Doe,OU=Users,DC=company,DC=com"

要获取 Active Directory 域中的所有用户,请使用 -Filter * 参数。

# Get all users (basic properties only)
Get-ADUser -Filter *
# Format output in a table for better readability
Get-ADUser -Filter * | Format-Table Name, sAMAccountName, Enabled

示例 2:获取更多用户属性,如部门、电子邮件地址等

若要查看电子邮件地址或部门等更多有用信息,需要使用 -Properties 参数。

# To view all properties for all users
Get-ADUser -Filter * -Properties *
# To view a specific selection of properties for all users
Get-ADUser -Filter * -Properties email, department | Select-Object Name, email, department

示例 3:筛选并导出用户到 CSV 文件

一个常见需求是将用户列表导出到 CSV 文件以便报告或审计。您可以结合使用 Export-Csv cmdlet 和 Get-ADUser cmdlet 来实现。

Get-ADUser -Filter * -Properties email, department | Select-Object name, email, department | Export-Csv -Path "C:\Reports\ad_users.csv" -NoTypeInformation

示例 4:从 OU 获取 AD 用户

限制搜索到某个 OU 的关键是使用 Get-ADUser cmdlet 的 -SearchBase 参数。为此,您需要目标 OU 的唯一标识名称(DN),它是您域内该 OU 的唯一路径。

以下是查找方法:

  1. 打开 Active Directory Users and Computers
  2. 在顶部菜单中点击 View,确保选中 Advanced Features
  3. 导航至目标 OU 并右键点击。
  4. 选择 属性
  5. Attribute Editor 选项卡中。
  6. 在列表中找到 distinguishedName 属性并复制其值。

获取 DN 后,将其与 -SearchBase 参数一起使用。-Filter * 命令将获取该位置内的所有用户。

Get-ADUser -Filter * -SearchBase "OU=Sales,DC=yourdomain,DC=com"

示例 5:查找具有特定职位的用户

使用此命令生成组织中拥有特定职位的所有用户列表。这在创建有针对性的电子邮件分发列表或部门报告时非常有用。

Get-ADUser -Filter "Title -eq 'Sales Manager'" -Properties displayName, department | Select-Object displayName, department, sAMAccountName

示例 6:查找最近创建的用户

此脚本检索过去七天内创建的所有用户帐户列表。这有助于跟踪最近的帐户创建情况或验证新员工是否已正确设置。

$days = 7
$cutoffDate = (Get-Date).AddDays(-$days)
Get-ADUser -Filter 'whenCreated -ge $cutoffDate'-Properties whenCreated | Select-Object Name, sAMAccountName, whenCreated

示例 7:按部分名称查找用户

当您只知道用户名称的一部分时,可以使用通配符(*)查找。例如,如果您想查找所有名称中包含“John”的用户,可以使用以下脚本:

Get-ADUser -Filter "Name -like '*John*'" -Properties displayName, email | Select-Object displayName, email

示例 8:查找经理的直接下属

此脚本使用用户的 DN 查找所有将该用户列为其经理的用户帐户,有效地映射团队结构。

$manager = Get-ADUser "manager.sAMAccountName"
Get-ADUser -Filter "manager -eq '$($manager.distinguishedName)'"-Properties displayName, Title | Select-Object Name, DisplayName, Title

示例 9:查找多个部门的用户

本示例演示如何检索属于多个部门的用户列表。这比为每个部门分别运行并合并命令效率高得多。

Get-ADUser -Filter "department -eq 'Sales' -or department -eq 'Marketing'" -Properties department | Select-Object name, department

排错技巧

  1. 错误: The term 'Get-ADUser' is not recognized as the name of a cmdlet.

    解决方案:此错误表示 Active Directory Module 未安装或在您的 PowerShell 会话中不可用。要解决此问题,您需要在 Windows 客户端计算机上安装远程服务器管理工具(RSAT)中的 AD。对于服务器,请确保已安装Windows PowerShell 的 Active Directory 模块功能。

  2. 错误: Cannot find an object with identity: 'username'

    解决方案:这表明在 -Identity 参数中指定的用户未找到。请仔细检查用户名拼写,并确认该用户帐户确实存在于 AD 中且未被删除。

  3. 错误: Access is denied

    解决方案:您用于运行 PowerShell 脚本的用户帐户没有读取 AD 信息的必要权限。为解决此问题,请以域成员身份且至少具有读取权限的用户身份运行 PowerShell。

  4. 错误: Error parsing query

    此类错误或在预期有结果时无结果,通常是由于 -Filter 字符串中的语法问题引起的。请验证变量和特殊字符是否正确引用和转义。

  5. 错误: Unable to find a default server with Active Directory Web Services running.

    解决方案:这是网络连接错误。运行脚本的计算机无法联系 DC。请检查网络连接,并确保您可以 ping 通您的域和特定的 DC。

使用 Get-ADUser PowerShell cmdlet 生成 AD 用户报告的限制

虽然 PowerShell 是一个强大的报告生成工具,但它存在一些固有限制,尤其是在更广泛的 IT 团队进行定期报告时。

  • 缺乏图形用户界面(GUI): PowerShell 对核心系统管理以外的员工来说,运行查询或生成报告较为困难。
  • 安全性和委派风险: 授予用户远程 PowerShell 访问域控制器可能带来安全风险。
  • 生成自定义报告耗时: 生成一个过滤多个特定属性并清晰呈现数据的自定义报告,可能需要大量时间来编写、测试和完善。

使用 ADManager Plus 进行 AD 用户报告的亮点

ADManager Plus 是一款全面的AD 报告解决方案,直接解决了 PowerShell 的限制,使组织能够更高效、更安全地管理和报告其 AD 环境。

  • 基于 GUI 且无需脚本: 凭借其直观的界面,ADManager Plus 允许任何技能水平的用户仅需几次点击即可安全生成详细报告。这消除了对脚本知识的需求,减少错误,并释放管理员的时间。
  • 丰富的预构建报告库 该解决方案附带 200 多个预配置报告,涵盖 AD 用户、计算机、组、GPO 等。
  • 安全且细粒度的委派 管理员可以安全地将报告任务委派给非管理员人员,如帮助台技术人员或人力资源经理。您可以创建自定义角色,允许用户仅在特定 OU 上运行特定报告,确保他们仅查看所需数据,且无需接触脚本或获得广泛权限。
  • 自动化和定时报告 任何报告都可以设置为每日、每周或每月自动运行。结果可自动导出为 CSV、PDF、XLSX、CSVDE 或 HTML 格式。
  • 完全可定制的报告 除了丰富的内置选项外,您还可以轻松创建符合组织独特需求的自定义报告。报告生成器允许您定义自己的条件和过滤器,选择任何 AD 属性进行显示,并生成高度特定的报告,无需编写任何脚本。

使用 ADManager Plus 获取 AD 用户,无需脚本。

常见问题解答

Get-ADUser cmdlet 用于从 AD 获取一个或多个用户对象。管理员使用它根据特定条件查找用户,查看其属性,并导出用户数据以进行报告和审计。

您可以使用 -Filter 参数过滤 AD 用户,该参数接受查询字符串。例如,要查找所有属于 Marketing 部门的用户,您可以使用:

Get-ADUser -Filter "Department -eq 'Marketing"

要获取用户的所有属性,必须使用 -Properties 参数。这对于获取重要用户属性如 LastLogonDate、whenCreated 和 MemberOf 至关重要。

一个简单的方法是尝试检索该用户并检查命令是否返回结果。如果返回对象,则用户存在;如果返回空或错误,则用户不存在。

要获取用户所属的组列表,需要查询 MemberOf 属性。

Get-ADUser -Identity 'john' -Properties MemberOf | Select-Object -ExpandProperty MemberOf
Active Directory管理与报告的一站式解决方案
电子邮件下载链接 Email the ADManager Plus download link