Get-ADUser cmdlet 是管理员在处理 AD 时最常用的 PowerShell cmdlet 之一。此 cmdlet 允许您查询并获取所有 AD 用户及其特定属性,并应用筛选器以根据组织单位(OU)、组成员身份或属性查找特定的 AD 用户。本文通过实际示例说明如何使用 Get-ADUser cmdlet,包括高级筛选技术、属性选择等内容。本文还将该 cmdlet 与 AD user reports 中的 ADManager Plus 直接进行比较,后者是一款 AD reporting tool。
了解基于脚本的 PowerShell 方法与 ADManager Plus 中简单的 GUI 报告功能的区别。
开始之前,请确保您已具备:
使用 PowerShell 获取所有 AD 用户:
Get-ADUser -Filter *
使用不同参数结合 Get-ADUser cmdlet 生成更细粒度的用户报告。
使用 ADManager Plus 获取所有 AD 用户:
以下是一些可与 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 | 使用不同用户账户的凭据运行命令。 |
要检索特定用户的信息,请使用 -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
若要查看电子邮件地址或部门等更多有用信息,需要使用 -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
一个常见需求是将用户列表导出到 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
限制搜索到某个 OU 的关键是使用 Get-ADUser cmdlet 的 -SearchBase 参数。为此,您需要目标 OU 的唯一标识名称(DN),它是您域内该 OU 的唯一路径。
以下是查找方法:
获取 DN 后,将其与 -SearchBase 参数一起使用。-Filter * 命令将获取该位置内的所有用户。
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=yourdomain,DC=com"
使用此命令生成组织中拥有特定职位的所有用户列表。这在创建有针对性的电子邮件分发列表或部门报告时非常有用。
Get-ADUser -Filter "Title -eq 'Sales Manager'" -Properties displayName, department | Select-Object displayName, department, sAMAccountName
此脚本检索过去七天内创建的所有用户帐户列表。这有助于跟踪最近的帐户创建情况或验证新员工是否已正确设置。
$days = 7
$cutoffDate = (Get-Date).AddDays(-$days)
Get-ADUser -Filter 'whenCreated -ge $cutoffDate'-Properties whenCreated | Select-Object Name, sAMAccountName, whenCreated
当您只知道用户名称的一部分时,可以使用通配符(*)查找。例如,如果您想查找所有名称中包含“John”的用户,可以使用以下脚本:
Get-ADUser -Filter "Name -like '*John*'" -Properties displayName, email | Select-Object displayName, email
此脚本使用用户的 DN 查找所有将该用户列为其经理的用户帐户,有效地映射团队结构。
$manager = Get-ADUser "manager.sAMAccountName"
Get-ADUser -Filter "manager -eq '$($manager.distinguishedName)'"-Properties displayName, Title | Select-Object Name, DisplayName, Title
本示例演示如何检索属于多个部门的用户列表。这比为每个部门分别运行并合并命令效率高得多。
Get-ADUser -Filter "department -eq 'Sales' -or department -eq 'Marketing'" -Properties department | Select-Object name, department
解决方案:此错误表示 Active Directory Module 未安装或在您的 PowerShell 会话中不可用。要解决此问题,您需要在 Windows 客户端计算机上安装远程服务器管理工具(RSAT)中的 AD。对于服务器,请确保已安装Windows PowerShell 的 Active Directory 模块功能。
解决方案:这表明在 -Identity 参数中指定的用户未找到。请仔细检查用户名拼写,并确认该用户帐户确实存在于 AD 中且未被删除。
解决方案:您用于运行 PowerShell 脚本的用户帐户没有读取 AD 信息的必要权限。为解决此问题,请以域成员身份且至少具有读取权限的用户身份运行 PowerShell。
此类错误或在预期有结果时无结果,通常是由于 -Filter 字符串中的语法问题引起的。请验证变量和特殊字符是否正确引用和转义。
解决方案:这是网络连接错误。运行脚本的计算机无法联系 DC。请检查网络连接,并确保您可以 ping 通您的域和特定的 DC。
虽然 PowerShell 是一个强大的报告生成工具,但它存在一些固有限制,尤其是在更广泛的 IT 团队进行定期报告时。
ADManager Plus 是一款全面的AD 报告解决方案,直接解决了 PowerShell 的限制,使组织能够更高效、更安全地管理和报告其 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