如何使用 PowerShell 获取 Active Directory 中的所有活动用户

了解如何识别活动用户帐户对于安全审计、许可证管理和确保顺利运行至关重要。虽然大多数管理员使用 PowerShell 来完成此操作,但这可能既耗时又复杂。另一方面,ADManager Plus,一款Active Directory (AD) 报告工具,使管理员只需几次点击即可获得所有活动 AD 用户的报告。

获取 AD 中的所有活动用户

下表列出了使用 PowerShell 和 ADManager Plus 获取所有活动 AD 用户的步骤:

Windows PowerShell

前提条件

确保已安装 AD 模块。如果没有,请下载适合您操作系统的 RSAT 包,并运行以下命令以激活该模块。

Import-Module ActiveDirectory

使用 Get-ADUser 筛选活动用户

运行以下脚本以获取活动 AD 用户。此脚本使用 Get-ADUser cmdlet,并通过筛选器仅查找 Enabled 属性设置为 $True 的帐户。

Get-ADUser -Filter {Enabled -eq $True} -Properties DisplayName, EmailAddress
ADManager Plus
  1. 登录到 ADManager Plus 并导航至 Reports > User Reports
  2. Logon Reports 下,点击 Enabled Users
  3. 选择所需的域并点击 Generate

获取活动用户的示例用例和 PowerShell 脚本

示例 1:获取所有活动 AD 用户

Get-ADUser -Filter 'Enabled -eq $True'

示例 2:获取带有最后登录日期的活动 AD 用户

Get-ADUser -Filter {Enabled -eq $true} -Properties DisplayName, LastLogonDate |
Select-Object Name, DisplayName, LastLogonDate |
Sort-Object LastLogonDate -Descending

示例 3:获取特定 OU 中的所有活动 AD 用户

Get-ADUser -Filter {Enabled -eq $True} -SearchBase "OU=Sales,DC=domain,DC=com" -Properties DisplayName, EmailAddress |
Select-Object Name, DisplayName, EmailAddress

示例 4:将活动 AD 用户导出为 CSV

Get-ADUser -Filter {Enabled -eq $True} -Properties SamAccountName, EmailAddress |
Select-Object SamAccountName, EmailAddress |
Export-Csv -Path "EnabledUsers.csv" -NoTypeInformation

支持的参数

以下是列出活动 AD 用户时可用的重要参数:

描述
-Filter 指定 PowerShell 表达式格式的筛选字符串,以限制返回的用户对象。
-Properties 指定除默认集合之外要检索的其他 AD 属性,例如 DisplayNameEmailAddress
-Identity 通过用户名或 SamAccountName 检查特定用户。
-Export-Csv 用于将报告导出为 CSV 文件(不是 cmdlet 参数,而是在管道中使用)。
-Path 导出报告的输出文件路径。

排错技巧

即使使用正确的命令,使用 PowerShell 获取活动用户数据有时也可能出现错误或输出不完整。以下是一些常见问题及其解决方法:

1. Get-ADUser:未识别该术语

原因:未安装或未导入 AD 模块。

解决方案:确保您在安装了 RSAT: AD 工具的系统上运行 PowerShell。通过运行以下命令手动导入模块:

Import-Module ActiveDirectory

2. 缺少 LastLogonDate 或其他属性

原因:某些属性如 LastLogonDate 默认未包含。

解决方案:始终使用 -Properties 参数明确指定所需属性,如下所示:

Get-ADUser -Filter {Enabled -eq $true} -Properties LastLogonDate

3. 权限被拒绝或访问被拒绝

原因:您的 PowerShell 会话权限不足。

解决方案:以管理员身份运行 PowerShell。

4. 返回空结果

原因:筛选器配置错误或指定了错误的 OU。

解决方案:

  • 仔细检查您的筛选器语法。
  • 确保 OU 路径准确无误。
  • 验证指定的 OU 中是否存在活动用户。

使用 PowerShell 脚本获取活动用户的限制

虽然功能强大,但仅依赖 PowerShell 进行广泛的用户报告可能会带来挑战:

  • 非脚本人员的复杂性: 对不熟悉 PowerShell 的管理员来说,编写和调试复杂脚本可能非常耗时。
  • 缺乏集中报告: 生成各种 AD 属性的全面 PowerShell 报告通常需要结合多个脚本和手动数据整合。
  • 错误处理: 需要在每个脚本中显式构建健壮的错误处理机制。

选择 ADManager Plus 而非 PowerShell 的优势

ADManager Plus 弥合了强大 AD 报告与易用性之间的差距。以下是它为何成为许多 IT 团队更佳选择的原因:

  • 无需脚本: 只需几次点击即可轻松生成有关活动用户、非活动用户、锁定用户等的报告,无需任何脚本。
  • 预定义报告: 访问 200 多个开箱即用的报告,为您节省大量时间。
  • 可定制报告: 创建包含特定属性和筛选条件的定制报告,以满足您独特的审计和合规需求。
  • 自动报告调度: 安排报告 自动生成并发送到您的收件箱,确保您始终拥有最新信息。
  • 委派报告: 安全地将 AD 报告任务委派 给帮助台技术人员,无需让他们接触敏感数据或复杂的 PowerShell 脚本。

今天就获取您的活动 AD 用户列表

常见问题解答

要查找过去 90 天内登录的用户,您可以在 PowerShell 中使用 Get-ADUser cmdlet,并基于 lastLogonTimestamp 属性进行筛选:

$NinetyDaysAgo = (Get-Date).AddDays(-90)
Get-ADUser -Filter {lastLogonTimestamp -ge $NinetyDaysAgo.ToFileTime()} -Properties Name, lastLogonTimestamp |
Select-Object Name, @{Name="LastLogon"; Expression={[datetime]::FromFileTime($_.lastLogonTimestamp)}}

或者,您可以使用 ADManager Plus 快速生成显示指定时间范围内登录用户的 AD 登录报告

要查找在特定时间段(例如 60 天)内未登录的活动用户,请使用此 PowerShell 脚本:

$daysInactive = 60
$inactiveDate = (Get-Date).AddDays(-$daysInactive)
Get-ADUser -Filter {Enabled -eq $True -and LastLogonDate -lt $inactiveDate} -Properties LastLogonDate | Select-Object Name, SamAccountName, LastLogonDate

对于无脚本方案,请使用 ADManager Plus 的登录报告 快速识别非活动用户或最近未登录的用户。

您可以使用 PowerShell 中的 Get-ADUser cmdlet 检索 AD 用户列表。有关详细步骤、示例和支持的参数,点击这里

在 AD 中,启用用户指的是账户未被禁用且技术上允许登录的用户(Enabled = True)。但这并不意味着用户正在积极使用该账户。活动用户通常指的是最近登录过的启用账户,通常是在定义的时间范围内,如过去 30、60 或 90 天。因此,所有活动用户都是启用的,但并非所有启用用户都是活动的。

是的,ADManager Plus 提供 自动化用户报告调度功能,包括针对活动、非活动和最近登录用户的报告。报告可以自动发送到指定的电子邮件地址。您还可以 配置通知模板,在管理任务完成时接收警报。

Active Directory管理与报告的一站式解决方案
电子邮件下载链接 Email the ADManager Plus download link