PowerShell Get-ADUser查询AD用户属性返回空值异常问题
问题原因
两个问题本质都是Get-ADUser的默认机制导致的,和OU本身无关:
Get-ADUser默认只返回固定的一小部分用户属性,Title、AccountExpirationDate都不在默认返回集里,没显式指定拉取的话,就算AD里配了值,Select出来也是空。Enabled不是AD原生存储的属性,是cmdlet根据原生属性userAccountControl的标志位计算出来的。你提到的管理员OU下的账户基本都是受AdminSDHolder保护的高权限账户,默认查询时如果没显式拉取计算所需的属性,或者运行命令的账号对这些受保护对象的读取权限不够,就会计算失败返回空值。- 补充说明:如果用户账户设置为永不过期,
AccountExpirationDate本身就会返回空,这是正常表现,对应原生属性accountExpires的值为0或9223372036854775807,不是命令错误。
解决步骤
- 权限准备:使用拥有AD域读取权限的账户运行PowerShell,查询高权限管理员账户属性建议使用域管理员组成员账户,启动PowerShell时选择「以管理员身份运行」避免权限裁剪。
- 参数补全:在
Get-ADUser中添加-Properties参数,显式指定需要拉取的非默认属性,确保cmdlet向AD请求所有需要用到的字段。 - 导出优化:导出CSV时添加
-NoTypeInformation参数去除多余的PowerShell类型描述行,在PowerShell 5.1环境中额外添加-Encoding UTF8参数避免中文属性值乱码。
修正后的可直接运行命令:
Get-ADUser -Filter * -SearchBase "DC=XXX,DC=XXXX" -Properties Title, AccountExpirationDate, userAccountControl | Select-Object Name, GivenName, Surname, SamAccountName, DistinguishedName, Enabled, Title, AccountExpirationDate | Export-Csv -Path C:\users\myname\ADUsersWithExpirationDate.csv -NoTypeInformation -Encoding UTF8
异常排查
如果跑完还有个别账户Enabled为空,可单独查询对应账户确认权限问题:
# 将<异常账户登录名>替换为实际出问题的SamAccountName Get-ADUser -Identity <异常账户登录名> -Properties userAccountControl, Title, AccountExpirationDate
如果单独查询也返回空属性,说明当前账号对这个受保护对象的读取权限不足,换高权限账号运行即可。
内容的提问来源于stack exchange,提问作者John Deaux
相关产品推荐
相关产品推荐

