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

如何筛选并显示Active Directory中已启用用户的详细信息

问题描述

编写了一段PowerShell脚本用于查询Active Directory(AD)用户的启用/禁用状态,需求是仅显示状态为已启用(True)的用户详细信息。当前使用的脚本如下:

$outputs = Get-Content -Path C:\Users\dcsysad\Desktop\BulkUserPasswordReset.csv |ForEach-Object{ 
Get-ADUser -LDAPFilter "(samaccountname=$_)" |Select-Object -Property samaccountname,enabled}
If ($outputs.enabled -like "True"){
Write-Output $outputs
}

当前运行输出无法正确过滤,会包含禁用用户,不符合需求。

解决方案

问题核心是对集合对象的判断逻辑错误:$outputs是多用户对象的集合,直接用$outputs.enabled -like "True"会导致PowerShell处理数组匹配时逻辑失效,无法精准过滤。

方法一:查询阶段直接筛选(性能更优)

通过LDAP过滤器直接仅查询已启用用户,减少不必要的数据返回:

Get-Content -Path C:\Users\dcsysad\Desktop\BulkUserPasswordReset.csv | ForEach-Object {
    # LDAP过滤器同时匹配用户名和已启用状态
    Get-ADUser -LDAPFilter "(& (samaccountname=$_) (!userAccountControl:1.2.840.113556.1.4.803:=2))" |
        Select-Object -Property samaccountname, enabled
}

注:!userAccountControl:1.2.840.113556.1.4.803:=2是LDAP的按位匹配语法,用于排除userAccountControl属性中包含禁用标识(值为2)的用户,即仅返回已启用账号。

方法二:结果集合后过滤

如果需要先获取所有用户再筛选,使用Where-Object处理集合:

$outputs = Get-Content -Path C:\Users\dcsysad\Desktop\BulkUserPasswordReset.csv | ForEach-Object {
    Get-ADUser -LDAPFilter "(samaccountname=$_)" |
        Select-Object -Property samaccountname, enabled
}
# 精准过滤enabled属性为$true的用户
$outputs | Where-Object { $_.enabled -eq $true }

两种方法都能实现仅显示已启用AD用户的需求,推荐方法一,因为它在AD查询阶段就完成筛选,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:57:18