如何获取 AD 用户的 sAMAccountName

sAMAccountName 是用于支持早期版本 Windows(Windows 2000 之前)的客户端和服务器的登录名。尽管年代久远,它仍然是 Active Directory (AD) 中确保向后兼容性的基本属性,作为域中用户和计算机的唯一登录名。Get-ADUser PowerShell cmdlet 常用于识别 AD 用户对象的 sAMAccountName。本文介绍如何使用 PowerShell 以及 AD user reportsADManager Plus 中获取 AD 用户的 sAMAccountName。

查找 AD 用户的 sAMAccountName:PowerShell 与 ADManager Plus 对比

下表比较了使用 PowerShell 与 ADManager Plus 查找 AD 用户 sAMAccountName 的过程。

Windows PowerShell

开始之前,请确保:

  • 已安装 Active Directory PowerShell 模块。
  • 已配置正确的 PowerShell 执行策略。
  • 您使用的帐户至少具有查询目标 AD 域的读取权限。

要使用 PowerShell 获取 AD 用户的 sAMAccountName,请以管理员身份打开 Windows PowerShell 并执行以下脚本:

Get-ADUser -Identity 'John' | Select-Object Name, sAMAccountName
ADManager Plus

使用 ADManager Plus 查找 AD 用户的 sAMAccountName:

  1. 登录 ADManager Plus。
  2. 导航至 Reports > User Reports > General Reports > All Users.
  3. 选择 OU,然后点击 生成
  4. 点击 Add/Remove columns,将 sAMAccountName 列添加到结果中。
  5. 使用 Export As 选项将报告导出为以下任一格式:CSV、PDF、XLSX、HTML 或 CSVDE。

获取 AD 用户 sAMAccountName 的示例

示例 1:获取特定 OU 中所有用户的 sAMAccountName

要检索特定 OU 中的用户列表,可以使用 -SearchBase 参数。

Get-ADUser-Filter * -SearchBase$targetOU | Select-Object Name, sAMAccountName

示例 2:获取域中所有用户的 sAMAccountName

要获取域中所有用户的完整列表,只需删除前一个示例中的 -SearchBase 参数。

Get-ADUser -Filter * | Select-Object Name, sAMAccountName

示例 3:将 sAMAccountName 导出为 CSV

以下命令获取所有用户并将其名称、sAMAccountName 及状态导出到 CSV 文件。

Get-ADUser -Filter * -Properties Enabled | Select-Object Name, sAMAccountName, Enabled | Export-Csv -Path "C:\AD_Users.csv" -NoTypeInformation

通过 sAMAccountName 获取 AD 用户的示例

以下是使用 Get-ADUser cmdlet 根据 sAMAccountName 检索用户的一些实用示例。

示例 1:通过 sAMAccountName 获取单个用户

获取用户最简单的方法是使用 -Identity 参数及其 sAMAccountName。

# Get user by sAMAccountName
Get-ADUser -Identity "John"

示例 2:使用 sAMAccountName 获取特定属性

若要查看默认属性之外的内容,请使用 -Properties 参数指定要查看的属性,例如电子邮件地址或部门。

# Get the email address and department of a user
Get-ADUser -Identity "John" -Properties email, department | Select-Object name, email, department

示例 3:通过 sAMAccountName 检查用户是否启用

使用以下脚本仅通过 sAMAccountName 检查用户是否启用:

# Import the list of sAMAccountNames from a CSV file
Import-Csv -Path "C:\temp\users.csv" | ForEach-Object {
# For each username in the CSV, run Get-ADUser
Get-ADUser -Identity $_.sAMAccountName -Properties Enabled, LastLogonDate | Select-Object sAMAccountName, name, Enabled, LastLogonDate

使用 PowerShell 获取 AD 用户 sAMAccountName 的限制

虽然 PowerShell 是强大的 AD 管理工具,但仅依赖它存在重大挑战,尤其是在复杂的 AD 环境中。

  • 缺乏用户友好的报告:生成全面且视觉吸引力强的报告几乎不可能,除非进行大量脚本编写和使用其他工具。
  • 无审计跟踪:原生 PowerShell 不提供直接的审计日志,需要自定义日志记录和转录解决方案,增加了维护和审查的复杂性。
  • 批量任务耗时:虽然 PowerShell 允许执行批量 AD 管理操作,但某些批量任务需要大量脚本编写且执行时间较长。

使用 ADManager Plus 获取 AD 用户报告的优势

ADManager Plus 让您克服所有 PowerShell 的限制,通过其预定义的 AD 报告轻松获取 AD 用户。

  • 无脚本报告:无需编写任何脚本,即可执行复杂的单用户和批量用户操作。
  • 全面报告访问 200 多个预构建的 AD 报告,立即获得 AD 对象的可见性。
  • 完整审计跟踪: 在 ADManager Plus 中执行的每个操作都会记录为审计报告,让您轻松跟踪所有管理更改。

使用 ADManager Plus 通过 sAMAccountName 获取 AD 用户

常见问题解答

sAMAccountName 是传统的、兼容 NetBIOS 的登录名,而 UserPrincipalName 是更现代的、类似电子邮件格式的登录名。

这是任何用户入职脚本中的关键步骤,以避免错误。最好的方法是尝试检索用户并检查结果是否为 null。以下是一个简单且可靠的函数,您可以将其添加到脚本中:

function Test-sAMAccountNameExists {
param (
[Parameter(Mandatory=$true)]
[string]$UserName
)
# The @() ensures the result is always an array, preventing errors if null
$user = @(Get-ADUser -Filter "sAMAccountName -eq '$UserName'")
if ($user.Count -gt 0) {
# If count is greater than 0, the user exists
Write-Host "Username '$UserName' already exists." -ForegroundColor Red return $true
} else {
Write-Host "Username '$UserName' is available." -ForegroundColor Green return $false
}
}
# --- How to use the function ---
Test-sAMAccountNameExists -UserName "b.cooper"
Test-sAMAccountNameExists -UserName "new.user99"

AD 中的 manager 属性存储的是专有名称,而不是 sAMAccountName。为此,您需要检索用户对象,检查 Manager 属性是否已填充,如果是,则可以使用其值来检索经理的用户对象。以下是脚本:

# The user you want to check
$userName = "b.cooper"
# Step 1: Get the user and specifically request the Manager property
$user = Get-ADUser -Identity $userName -Properties Manager
if ($null -ne $user.Manager) {
# Step 2: If the manager property exists, get the manager's user object
$manager = Get-ADUser -Identity $user.Manager
Write-Host "The manager of '$userName' is '$($manager.sAMAccountName)'."
}
else {
Write-Host "User '$userName' does not have a manager listed."
}
Active Directory管理与报告的一站式解决方案
电子邮件下载链接 Email the ADManager Plus download link