如何用Graph Explorer和Azure CLI获取已删邮件ID并解决执行报错
错误原因说明
你遇到的Invoke-WebRequest错误,是因为PowerShell里的curl是Invoke-WebRequest的别名,和Linux系统原生curl的语法不兼容,导致参数传参逻辑出错。
一、修复脚本的两种方案
1. 用PowerShell原生命令替代curl
直接改用Invoke-RestMethod(PowerShell专门用于REST请求的命令),完整脚本如下:
$USER_EMAIL = "test1@test.com" # 已登录Azure CLI可跳过此步 az login # 获取Graph API访问令牌 $TOKEN = az account get-access-token --resource https://graph.microsoft.com --client-id $CLIENT_ID --client-secret $CLIENT_SECRET --tenant $TENANT_ID --query accessToken -o tsv # 获取已删除邮件的ID列表 $deletedEmails = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$USER_EMAIL/mailFolders/deletedItems/messages" -Headers @{Authorization = "Bearer $TOKEN"} $deletedEmailIds = $deletedEmails.value.id # 批量永久删除已删除邮件 foreach ($id in $deletedEmailIds) { Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$USER_EMAIL/mailFolders/deletedItems/messages/$id" -Method Delete -Headers @{Authorization = "Bearer $TOKEN"} Write-Host "已永久删除邮件ID: $id" }
2. 调用原生curl程序
如果你的环境安装了独立curl(比如Git Bash自带的curl),可以指定curl的完整路径执行,示例:
$deletedEmailIds = & "C:\Program Files\Git\mingw64\bin\curl.exe" -s -X GET "https://graph.microsoft.com/v1.0/users/$USER_EMAIL/mailFolders/deletedItems/messages" -H "Authorization: Bearer $TOKEN" | jq -r '.value[].id'
注意替换为你实际的curl安装路径,同时确保jq工具已安装。
二、Azure中直接实现的方式
1. Azure Automation Runbook
创建PowerShell类型的Runbook,将上述脚本导入,配置拥有Mail.ReadWrite权限的Azure AD服务主体,设置定时触发规则,即可自动批量永久删除指定用户的已删邮件。
2. Logic Apps
通过可视化配置实现:
- 添加「Microsoft Graph - 获取邮件」动作,指定邮件文件夹为
deletedItems - 添加「Microsoft Graph - 删除邮件」动作,关联上一步获取的邮件ID
- 设置触发条件(比如定时触发),无需编写大量代码即可完成批量删除操作
内容的提问来源于stack exchange,提问作者Natalie
相关产品推荐
相关产品推荐

