You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用含姓名的文本文件通过PowerShell检查AD用户账户启用状态

解决PowerShell通过用户全名查询AD账户启用状态的问题

你完全猜对了问题根源!你的代码报错是因为过滤条件和文本文件里的内容不匹配——文本里是用户的全名(名+姓),但你用了samaccountname(AD里的登录用户名,比如jsmith)来过滤,这两个属性完全不是一回事,自然查不到对应账户。

下面给你两种可行的修正方案,根据你的AD环境选择即可:

方案1:通过显示名称(Display Name)匹配

如果你的AD用户的"显示名称"就是文本里的全名格式(比如"John Smith"),直接用displayname属性过滤最方便:

Get-Content -Path users.txt | ForEach-Object {
    # 清理每行文本的首尾空白,避免格式干扰
    $fullName = $_.Trim()
    # 用displayname匹配AD用户,返回账号名和启用状态
    Get-ADUser -LDAPFilter "(displayname=$fullName)" | 
        Select-Object -Property samaccountname, enabled, displayname
}

我额外把displayname加入了返回结果,方便你核对查询到的用户是不是目标对象,避免重名导致的错误。

方案2:拆分名和姓分别匹配

如果AD里的显示名称格式和文本不一致(比如是"Smith, John"),可以把全名拆分成名(givenname)和姓(sn)组合查询:

Get-Content -Path users.txt | ForEach-Object {
    $fullName = $_.Trim()
    # 按空格分割全名成名和姓(支持姓里带空格的情况,比如"Mary van der Saar")
    $nameParts = $fullName -split '\s+', 2
    $givenName = $nameParts[0]
    $surName = $nameParts[1]
    # 组合名和姓的LDAP过滤条件
    Get-ADUser -LDAPFilter "(&(givenname=$givenName)(sn=$surName))" | 
        Select-Object -Property samaccountname, enabled, givenname, sn
}

额外注意事项

  • 确保运行这段PowerShell的账户拥有读取AD用户属性的权限,否则会返回权限不足的错误
  • 如果全名里包含特殊字符(比如&、(、)),需要对LDAP过滤器进行转义,不过一般日常的全名格式不需要额外处理
  • 可以先手动执行Get-ADUser -Filter {displayname -eq "你的测试用户名"}验证单个用户的属性是否匹配,确保过滤逻辑正确

内容的提问来源于stack exchange,提问作者Alex S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:24:52