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

如何用PowerShell查找M365会议组织者并清理离职员工会议

解决离职员工遗留会议室会议的PowerShell脚本方案

问题分析

离职员工账号被禁用后,其发起的会议室会议未取消会持续占用资源,核心难点在于禁用用户的组织者信息可能无法通过常规CmdLet直接匹配,需针对Exchange Online和Microsoft Graph模块分别处理。


Exchange Online模块解决方案

步骤说明

  1. 确保安装并更新最新模块:Update-Module ExchangeOnlineManagement
  2. 连接Exchange Online并获取离职员工的LegacyExchangeDN(禁用账号仍可从AD读取该标识)
  3. 遍历所有会议室,筛选目标会议并执行取消操作

脚本示例

# 连接Exchange Online
Connect-ExchangeOnline

# 配置离职员工信息
$departedUserUPN = "user@contoso.com"
# 从AD获取离职员工的LegacyExchangeDN(需AD模块权限)
$departedUserLegacyDN = (Get-ADUser -Identity $departedUserUPN -Properties LegacyExchangeDN).LegacyExchangeDN

# 获取所有会议室邮箱
$roomMailboxes = Get-EXOMailbox -RecipientTypeDetails RoomMailbox

foreach ($room in $roomMailboxes) {
    # 定位会议室日历文件夹
    $calendarFolder = Get-EXOMailboxFolderStatistics -Identity $room.Identity -FolderScope Calendar | 
                      Where-Object {$_.FolderType -eq "Calendar"}
    
    if ($calendarFolder) {
        # 获取日历中所有会议项目
        $calendarItems = Get-EXOMailboxFolderItem -Identity "$($room.Identity):\$($calendarFolder.Name)" -ResultSize Unlimited
        
        # 筛选离职员工发起的会议(匹配UPN或LegacyExchangeDN)
        $targetMeetings = $calendarItems | Where-Object {
            $_.Organizer -eq $departedUserUPN -or $_.Organizer -eq $departedUserLegacyDN
        }
        
        # 批量取消会议
        foreach ($meeting in $targetMeetings) {
            Write-Host "取消会议室 [$($room.DisplayName)] 中的会议: $($meeting.Subject)"
            Remove-EXOMailboxFolderItem -Identity "$($room.Identity):\$($calendarFolder.Name)" -ItemIds $meeting.Id -Confirm:$false
        }
    }
}

注意事项

  • 运行账号需拥有Exchange Online邮箱读写权限及AD读取权限
  • 测试阶段可添加-WhatIf参数到Remove-EXOMailboxFolderItem,避免误操作
  • 若AD无法访问,可通过离职员工未禁用前的Exchange数据导出LegacyExchangeDN

Microsoft Graph模块解决方案

步骤说明

  1. 更新Graph模块:Update-Module Microsoft.Graph
  2. 连接Graph并申请必要权限(Calendars.ReadWrite、Directory.Read.All)
  3. 通过用户ObjectID匹配组织者,遍历会议室取消目标会议

脚本示例

# 连接Microsoft Graph,申请权限
Connect-MgGraph -Scopes "Calendars.ReadWrite", "Directory.Read.All"

# 配置离职员工信息
$departedUserUPN = "user@contoso.com"
$departedUserId = (Get-MgUser -Filter "UserPrincipalName eq '$departedUserUPN'").Id

# 获取所有会议室邮箱
$roomMailboxes = Get-MgUser -Filter "RecipientTypeDetails eq 'RoomMailbox'"

foreach ($room in $roomMailboxes) {
    # 获取会议室日历所有事件
    $calendarEvents = Get-MgUserCalendarEvent -UserId $room.Id -All
    
    # 筛选离职员工发起的会议(匹配用户ObjectID)
    $targetEvents = $calendarEvents | Where-Object {$_.Organizer.Id -eq $departedUserId}
    
    # 批量取消会议
    foreach ($event in $targetEvents) {
        Write-Host "取消会议室 [$($room.DisplayName)] 中的会议: $($event.Subject)"
        Remove-MgUserCalendarEvent -UserId $room.Id -EventId $event.Id
    }
}

注意事项

  • 若离职员工账号已删除,可通过$_.Organizer.EmailAddress.Address -eq $departedUserUPN筛选
  • 需确保Graph应用或账号拥有会议室日历的读写权限
  • 可通过Get-MgUserCalendarEvent -Filter "Organizer/Id eq '$departedUserId'"优化查询效率,减少本地筛选压力

常见问题排查

  • 无法获取组织者信息:禁用用户的Organizer字段可能显示LegacyExchangeDN而非UPN,需提前获取该标识进行匹配
  • 权限不足:检查Exchange/Graph权限是否覆盖会议室日历读写及用户目录读取范围
  • 模块版本问题:旧版模块可能缺少部分属性支持,务必更新至最新版本

内容的提问来源于stack exchange,提问作者Patrik Westlin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:27:41