如何用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
相关产品推荐
相关产品推荐

