如何解决PowerShell导出6个月非活跃用户CSV时邮箱字段为空?
解决AD未活跃用户脚本邮箱字段为空的问题
问题核心在于你获取AD用户对象时没有包含邮箱属性:PowerShell的AD模块Get-ADUser默认仅返回有限的基础属性(如Name、SamAccountName),邮箱地址对应的AD原生属性是mail,属于扩展属性,必须显式指定才能被获取到,否则遍历对象时自然读不到该字段的值。
解决方法:
- 在调用
Get-ADUser时,通过-Properties参数显式指定要获取mail属性 - 在构造自定义对象时,直接用
$_.mail赋值给EmailAddress字段
修改后的完整代码片段:
# 计算6个月前的时间戳(匹配LastLogon的文件时间格式) $inactiveThreshold = (Get-Date).AddMonths(-6).ToFileTimeUtc() # 获取过去6个月未活跃的AD用户,显式指定返回LastLogon和mail属性 $logons = Get-ADUser -Filter { LastLogon -lt $inactiveThreshold } -Properties LastLogon, mail # 处理数据并导出CSV $logons | ForEach-Object { [PSCustomObject]@{ Name = $_.Name SamAccountName = $_.SamAccountName DistinguishedName = $_.DistinguishedName LastLogon = [datetime]::FromFileTimeUtc($_.LastLogon).ToString('u') EmailAddress = $_.mail } } | Export-CSV "C:\Users\Me\Desktop\InactiveUsers.CSV" -NoTypeInformation
补充说明:
EmailAddress是AD用户对象的别名属性,对应原生属性mail,你也可以在-Properties里指定EmailAddress,之后用$_.EmailAddress赋值,效果一致- 你之前的四种写法均为空,本质是因为遍历的
$_.对象中不存在mail或EmailAddress属性,必须先让Get-ADUser返回这些属性才能读取
内容的提问来源于stack exchange,提问作者S.Mahmood
相关产品推荐
相关产品推荐

