如何用PowerShell收集带邮箱的禁用AD用户多维度信息并导出CSV
解决方法
直接通过创建自定义PowerShell对象,整合Get-ADUser与Get-MailboxStatistics的属性即可实现需求,优化后的完整脚本如下:
# 获取所有非共享用户邮箱 $Mailboxes = Get-Mailbox | Where-Object {$_.RecipientTypeDetails -eq 'UserMailbox'} $date = Get-Date -Format "MMddyyyy_HHmm" $DisabledUsers = @() foreach ($Mailbox in $Mailboxes) { # 一次性获取AD用户的目标属性 $adUser = Get-ADUser -Identity $Mailbox.SamAccountName -Properties Title, Manager, LastLogonDate # 判断用户是否处于禁用状态 if (-not $adUser.Enabled) { # 获取邮箱统计数据 $mailboxStats = Get-MailboxStatistics $Mailbox.SamAccountName # 处理Manager字段:将LDAP路径转换为用户显示名称(可按需跳过此步直接保留原始DN) $managerDisplayName = if ($adUser.Manager) { (Get-ADUser -Identity $adUser.Manager -Properties DisplayName).DisplayName } else { $null } # 构建自定义对象,整合所有需要的字段 $mergedUserInfo = [PSCustomObject]@{ DisplayName = $mailboxStats.DisplayName TotalItemSizeMB = $mailboxStats.TotalItemSize.Value.ToMB() # 转换为MB单位更易读,保留原始格式可改为$mailboxStats.TotalItemSize Title = $adUser.Title Manager = $managerDisplayName LastLogonDate = $adUser.LastLogonDate SamAccountName = $adUser.SamAccountName # 可选字段,便于定位用户账号 } $DisabledUsers += $mergedUserInfo } } # 导出到CSV文件,替换下方路径为实际存储路径 $DisabledUsers | Sort-Object DisplayName | Export-Csv -Path "C:\YourTargetPath\DisabledADUsersWithMailbox_$date.csv" -NoTypeInformation -Encoding UTF8
核心说明
- 自定义对象构建:通过
[PSCustomObject]定义需要的所有输出字段,分别从Get-ADUser和Get-MailboxStatistics中提取对应属性赋值,实现数据合并。 - 属性按需调整:如果不需要转换Manager的显示名称,直接使用
$adUser.Manager即可;TotalItemSize的单位转换可根据需求取消,保留原始带单位的对象格式。 - 性能优化:通过
-Properties参数一次性获取AD用户的目标属性,避免重复查询AD服务;若邮箱数量极大,可考虑添加并行处理逻辑提升效率。
内容的提问来源于stack exchange,提问作者TDx2
相关产品推荐
相关产品推荐

