如何使用Exchange Online PowerShell执行Outlook Online的Run Rule Now功能?
如何在Exchange Online PowerShell中触发「Run Rule Now」功能
Exchange Online PowerShell模块没有原生命令直接实现「Run Rule Now」,但可以通过以下两种PowerShell方案完成需求:
方案1:使用Microsoft Graph API(推荐)
微软推荐使用Graph API替代传统接口,可通过PowerShell调用REST请求触发邮箱规则执行:
- 安装并导入Microsoft Graph模块:
Install-Module Microsoft.Graph -Force Import-Module Microsoft.Graph.Mail - 登录并获取权限令牌(需
Mail.ReadWrite权限):Connect-MgGraph -Scopes "Mail.ReadWrite" $token = (Get-MgAccessToken -Scope "Mail.ReadWrite").Token - 获取目标规则的ID(替换为实际邮箱和规则名称):
$userUPN = "user@yourdomain.com" $targetRule = Get-MgUserMailFolderRule -UserId $userUPN | Where-Object DisplayName -eq "你的规则名称" $ruleId = $targetRule.Id - 触发规则立即执行:
$requestBody = @{ ruleIds = @($ruleId) } | ConvertTo-Json $apiUri = "https://graph.microsoft.com/v1.0/users/$userUPN/mailFolders/inbox/messages/microsoft.graph.applyRules" Invoke-RestMethod -Uri $apiUri -Method Post -Headers @{Authorization = "Bearer $token"} -Body $requestBody -ContentType "application/json"
方案2:使用EWS Managed API(维护模式,不推荐长期使用)
EWS已进入维护阶段,仅作为临时兼容方案:
- 下载EWS Managed API并获取其程序集文件
- 编写PowerShell脚本加载程序集并触发规则:
# 加载EWS程序集(替换为实际路径) Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll" # 初始化EWS连接 $ewsService = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016) $ewsService.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials("user@yourdomain.com", "你的密码") $ewsService.Url = New-Object Uri("https://outlook.office365.com/EWS/Exchange.asmx") # 触发指定规则执行 $ruleId = "目标规则ID" # 可通过Get-InboxRule命令获取 $ewsService.ApplyRules(@($ruleId), [Microsoft.Exchange.WebServices.Data.ApplyRulesScope]::AllMessages)
注:上述方案仅针对收件箱规则(Inbox Rules),若需触发合规性/保留规则,需使用对应的合规PowerShell模块命令。
内容的提问来源于stack exchange,提问作者Korey Mendes
相关产品推荐
相关产品推荐

