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

Azure AD禁用用户关联共享邮箱查询脚本故障排查求助

问题排查:Azure AD禁用用户关联共享邮箱脚本无数据问题

我们正在开发PowerShell脚本,用于查询Azure AD中禁用用户关联的共享邮箱,并通过账户的Last password changed time属性判断其禁用时间。但运行脚本时,仅能偶尔获取到禁用用户关联的共享邮箱信息,其余时候导出的CSV文件无数据。

原脚本如下:

$DisabledUsers = Get-AzureADUser -Filter {(Enabled -eq $False)} | Select-Object  Lastpasswordchangedatetime
$SharedInboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox $Results = @()
Foreach ($SharedInbox in $SharedInboxes)`
    {
 $InboxPermissions = Get-MailboxPermission -Identity $SharedInbox.Identity | Where-Object {$_.User.ToString().Split("\")[1] -in $DisabledUsers}
 If ($InboxPermissions)
 {
    $Result = [PSCustomObject]@{
      SharedInbox = $SharedInbox.Identity
      DisabledUser = $InboxPermissions.User.ToString().Split("\")[1]
    }
    $Results += $Result
 }
} $Results | Export-Csv -Path "C:\SharedInboxforDisabledAccounts.csv" -NoTypeInformation

预期生成的CSV需包含:禁用用户关联的共享邮箱、用于标识账户禁用时间的最后密码修改日期。


核心问题分析

  • $DisabledUsers变量取值错误:原脚本仅提取了Lastpasswordchangedatetime属性,没有保留用户唯一标识(如SamAccountName或UserPrincipalName),导致后续权限对比时,用日期对象去匹配用户名称,完全无法命中。
  • 语法解析错误:$SharedInboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox后未添加换行或分号,直接拼接$Results = @(),PowerShell偶尔会解析失败,导致$SharedInboxes为空数组。
  • 权限匹配逻辑不可靠:Get-MailboxPermission返回的User属性格式不固定(可能是DOMAIN\用户名或用户UPN),用Split("\")[1]提取用户名的方式在UPN格式下会出错;且对比的目标是日期对象而非用户标识,逻辑完全错误。
  • 未包含预期属性:原脚本未将Lastpasswordchangedatetime加入输出结果,不符合需求。

修正后的脚本

# 获取禁用用户,保留SamAccountName和LastPasswordChangedDateTime属性
$DisabledUsers = Get-AzureADUser -Filter "Enabled eq false" | Select-Object SamAccountName, LastPasswordChangedDateTime

# 将禁用用户的SamAccountName存入集合,方便快速匹配
$DisabledUserNames = $DisabledUsers.SamAccountName

# 获取所有共享邮箱
$SharedInboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox

$Results = @()

foreach ($SharedInbox in $SharedInboxes) {
    # 获取共享邮箱的权限,过滤出禁用用户
    $InboxPermissions = Get-MailboxPermission -Identity $SharedInbox.Identity | 
        Where-Object {
            # 处理User属性的两种格式:DOMAIN\用户名 或 UPN
            $userName = if ($_.User -match "\\") { $_.User.Split("\")[1] } else { $_.User.Split("@")[0] }
            $userName -in $DisabledUserNames
        }

    if ($InboxPermissions) {
        foreach ($perm in $InboxPermissions) {
            # 匹配对应的禁用用户,获取其最后密码修改时间
            $userName = if ($perm.User -match "\\") { $perm.User.Split("\")[1] } else { $perm.User.Split("@")[0] }
            $disabledUser = $DisabledUsers | Where-Object { $_.SamAccountName -eq $userName }

            $Result = [PSCustomObject]@{
                SharedInbox               = $SharedInbox.Identity
                DisabledUser              = $userName
                LastPasswordChangedDateTime = $disabledUser.LastPasswordChangedDateTime
            }
            $Results += $Result
        }
    }
}

# 导出结果到CSV
$Results | Export-Csv -Path "C:\SharedInboxforDisabledAccounts.csv" -NoTypeInformation -Encoding UTF8

内容的提问来源于stack exchange,提问作者Donovan Correll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:00:54