如何通过PowerShell循环批量导出多个SendGrid子用户的退信(Blocks)记录
批量获取SendGrid子用户退信记录的PowerShell实现
我来帮你搞定这个批量获取的需求!你已经有了单个子用户的查询代码,只需要套个foreach循环加上一些批量处理的细节就行,具体实现如下:
核心思路
- 先把所有需要查询的子用户账号名整理成一个数组
- 遍历数组里的每个子用户,复用你现有的API请求逻辑
- 为每个子用户单独保存结果(避免数据混在一起),同时添加错误处理防止单个失败中断整个批量任务
完整代码示例
# 配置基础参数 $apiKey = "你的SendGrid API密钥" # 替换为你的实际API密钥 # 替换为你的30个子用户账号名列表,按实际情况添加/修改 $subusers = @( "subuser-account-01", "subuser-account-02", "subuser-account-03", # ... 剩下的子用户账号名 ) # 循环遍历每个子用户 foreach ($subuser in $subusers) { Write-Host "正在获取子用户【$subuser】的退信记录..." -ForegroundColor Cyan # 构造请求头:注意`on-behalf-of`填你的SendGrid主账号名,不是子用户的 $headers = @{ 'Authorization' = 'Bearer ' + $apiKey 'Content-Type' = 'application/json' 'on-behalf-of' = 'YOUR-MAIN-ACCOUNT-NAME' # 替换为你的主账号用户名 } try { # 调用SendGrid API获取退信记录 $blocks = Invoke-RestMethod -Method Get -Uri 'https://api.sendgrid.com/v3/suppression/blocks' -Headers $headers # 生成带时间戳的输出文件名,避免覆盖 $outputFileName = "$subuser-blocks-$(Get-Date -Format 'yyyyMMdd-HHmmss').json" $outputPath = Join-Path -Path $PWD.Path -ChildPath $outputFileName # 将结果保存为JSON格式(也可以改成CSV,看你需求) $blocks | ConvertTo-Json -Depth 10 | Out-File $outputPath -Encoding UTF8 Write-Host "✅ 子用户【$subuser】的退信记录已保存到: $outputPath" -ForegroundColor Green } catch { # 捕获错误并输出,不中断整个循环 Write-Error "❌ 获取子用户【$subuser】退信记录失败: $($_.Exception.Message)" } # 可选:添加延迟,避免触发SendGrid API速率限制(如果有需要的话) # Start-Sleep -Seconds 1 } Write-Host "`n批量获取任务全部完成!" -ForegroundColor Green
注意事项
- 权限验证:确保你的API密钥拥有
Suppression权限和子用户管理权限,否则会返回权限错误 - 主账号标识:
on-behalf-of字段必须填写你的SendGrid主账号用户名,不能填子用户的账号名 - 输出格式调整:如果需要CSV格式,把保存代码改成:
$blocks | Export-Csv -Path $outputPath.Replace(".json", ".csv") -NoTypeInformation -Encoding UTF8 - 速率限制:SendGrid API有请求速率限制,如果批量查询时遇到报错,可以在循环末尾添加
Start-Sleep -Seconds 1来降低请求频率
内容的提问来源于stack exchange,提问作者af3
相关产品推荐
相关产品推荐

