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

如何用PowerShell获取AD用户列表时排除禁用账户?

解决PowerShell导出AD用户时排除禁用账户的问题

错误原因

你尝试用Get-ADuser -filter {Enabled -eq $True}出现语法错误,是因为Get-ADUser的-Filter参数不支持脚本块({})格式,它需要使用字符串形式的过滤表达式。

两种可行解决方案

方案1:在Get-ADUser阶段直接过滤启用账户(更高效)

直接在Get-ADUser的-Filter参数中用字符串表达式筛选启用的用户,同时保留原有的排除DistinguishedName含"System"的逻辑,这样能减少后续管道处理的数据量:

$companyName = "GG"
$dateStr = (Get-Date).ToString("yyyyMMdd-hhmmss")
$exportPath = "C:\"
$exportFileName = "$exportPath\$dateStr`_$companyName`_userlist.csv"
# 显式指定获取lastLogonDate属性,同时过滤启用账户
$userList = Get-ADUser -Filter "Enabled -eq `$True" -Properties lastLogonDate | 
            Where-Object { $_.DistinguishedName -notLike "*System*" } | 
            Select-Object Name, samAccountName, lastLogonDate
$userList | Export-Csv -Path $exportFileName -NoTypeInformation

方案2:在原有Where-Object中添加排除禁用账户的条件

如果你更习惯保留原有的-Filter "*"写法,也可以直接在Where-Object里追加判断启用状态的条件:

$companyName = "GG"
$dateStr = (Get-Date).ToString("yyyyMMdd-hhmmss")
$exportPath = "C:\"
$exportFileName = "$exportPath\$dateStr`_$companyName`_userlist.csv"
$userList = Get-ADUser -Filter "*" -Properties lastLogonDate | 
            Where-Object { 
                $_.DistinguishedName -notLike "*System*" -and 
                $_.Enabled -eq $True 
            } | 
            Select-Object Name, samAccountName, lastLogonDate
$userList | Export-Csv -Path $exportFileName -NoTypeInformation

额外注意点

  • 你原脚本中$exportFileName的变量拼接存在语法错误:多余的括号会导致路径异常,直接用变量名拼接即可,下划线前加反引号避免和变量名混淆。
  • lastLogonDate不是Get-ADUser的默认返回属性,必须通过-Properties参数指定才能获取到正确值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:37:09