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

如何使用PowerShell读取txt用户列表查询AD账号启用状态

故障原因

注意:Get-ADUser本身原生支持管道传参,之前无输出完全是写法问题,和所谓「ADUser无法适配管道传参」的传言无关,具体问题点如下:

  • 属性匹配逻辑错误:源文件存储的是UserPrincipalName格式账号,但过滤条件用name -like "$_"匹配Name属性(AD账号的名称字段,和UPN完全不对应),无法命中任何用户。
  • 输入数据未清洗:gc(Get-Content别名)读取文本时会保留每行首尾空白字符、文件末尾空行,传入空值/带多余字符的值查询AD时不会返回结果,也不会抛出显性报错。
  • 过滤语句变量展开失效:单引号包裹的过滤条件中$_不会被替换为当前循环的用户值,实际执行的过滤条件为空。
  • 冗余参数拉低效率:-properties *会拉取AD账号的上百个全量属性,实际你只需要2个字段,无意义拖慢查询速度。
可直接运行的单行命令

适配你习惯的短别名写法,直接复制到PowerShell运行即可,结果会以弹窗表格形式展示:

gc .\users.txt | foreach { $_.Trim() } | ? { $_ } | foreach { get-aduser -server "corp.xxx.com" -f "UserPrincipalName -eq '$_'" -properties DisplayName } | select displayname,enabled | Out-GridView

命令各段逻辑说明:

  • $_.Trim():清除每行首尾的空格、换行符等隐形脏字符
  • ? { $_ }:过滤掉文本中的空行,避免无效查询
  • 过滤条件改为匹配UserPrincipalName属性,用精确匹配-eq替代模糊匹配-like,查询效率更高
  • 仅拉取需要的DisplayName属性,替代全量属性拉取
  • 若需要把结果导出为CSV文件,可把末尾的| Out-GridView替换为| Export-Csv .\AD账号状态结果.csv -Encoding UTF8 -NoTypeInformation
带异常标记的进阶版本

如果需要标记出查询不到的账号,避免漏查,可以运行以下版本,结果会自动导出为CSV文件,查无记录的账号会标注「未找到对应用户」:

gc .\users.txt | foreach { $_.Trim() } | ? { $_ } | foreach {
    $currentUpn = $_
    try {
        get-aduser -server "corp.xxx.com" -f "UserPrincipalName -eq '$currentUpn'" -properties DisplayName | select DisplayName,Enabled,@{Name="查询的UPN";Expression={$currentUpn}}
    }
    catch {
        [PSCustomObject]@{
            DisplayName = "未找到对应用户"
            Enabled = "查询失败"
            查询的UPN = $currentUpn
        }
    }
} | Export-Csv .\AD账号状态结果.csv -Encoding UTF8 -NoTypeInformation

运行前提:当前设备已安装RSAT Active Directory域服务工具,且你使用的账号对目标域有AD查询权限。

内容的提问来源于stack exchange,提问作者Ozgur Bulent Koza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:06:04