已完成OneDrive用量统计导出,如何实现超95%配额自动发通知邮件
OneDrive超额邮件通知实现方案
你当前流程失败的核心原因
Power Automate云端流无法直接访问你本地电脑的磁盘路径,没法读取存放在桌面的OneDriveUsage.xlsx文件,自然没法完成条件判断和邮件触发。
两种零门槛适配新手的实现方式
方式1:在现有PowerShell脚本里直接内嵌邮件发送逻辑,跳过Power Automate环节
不用额外调试低代码流,直接在你现有采集逻辑的基础上加超额筛选、邮件发送模块,修改后的完整可运行代码如下:
$adminUPN = "填写你的全局管理员UPN" $orgName = "填写你的租户SharePoint域名前缀,例如contoso对应https://contoso-admin.sharepoint.com" $notifyEmail = "填写你要接收告警通知的邮箱" $userCredential = Get-Credential -UserName $adminUPN Connect-SPOService -Url "https://$orgName-admin.sharepoint.com" -Credential $userCredential # 获取租户全量OneDrive个人站点 $ODFBSites = Get-SPOSite -IncludePersonalSite $True -Limit All -Filter "Url -like '-my.sharepoint.com/personal/'" | Select-Object Owner, Title, Url, StorageQuota, StorageUsageCurrent | Sort-Object StorageUsageCurrent -Descending $Report = [System.Collections.Generic.List[Object]]::new() # 新增列表专门存储用量超95%阈值的站点 $overThresholdSites = [System.Collections.Generic.List[Object]]::new() foreach ($Site in $ODFBSites) { # 跳过已停用、配额为0的异常站点,避免除零报错 if ($Site.StorageQuota -eq 0) { continue } $percentUsed = [Math]::Round(($Site.StorageUsageCurrent / $Site.StorageQuota * 100), 4) $reportLine = [PSCustomObject]@{ Owner = $Site.Title Email = $Site.Owner PercentUsed = $percentUsed QuotaGB = [Math]::Round($Site.StorageQuota / 1024, 2) UsedGB = [Math]::Round($Site.StorageUsageCurrent / 1024, 4) SiteUrl = $Site.Url } $Report.Add($reportLine) # 达到95%阈值就存入告警列表 if ($percentUsed -ge 95) { $overThresholdSites.Add($reportLine) } } # 导出全量用量报表 $Report | Export-Excel "C:\users\xxxx\desktop\OneDriveUsage.xlsx" # 存在超阈值站点时才发送邮件 if ($overThresholdSites.Count -gt 0) { $mailBody = "<h3>OneDrive存储配额告警</h3><p>当前共有 $($overThresholdSites.Count) 个用户的OneDrive用量已超过95%配额,明细如下:</p>" $mailBody += $overThresholdSites | ConvertTo-Html -Property Owner, Email, PercentUsed, UsedGB, QuotaGB, SiteUrl -Fragment | Out-String Send-MailMessage -From $adminUPN -To $notifyEmail -Subject "OneDrive存储用量超阈值提醒" -Body $mailBody -BodyAsHtml -SmtpServer "smtp.office365.com" -Port 587 -UseSsl -Credential $userCredential }
实操注意点:发信的管理员账号需要在Exchange后台开启SMTP发信权限,否则会被系统拦截退信。如果要定期自动执行,可以把脚本挂到Windows任务计划里,按周/按日固定触发,不用手动跑。
方式2:保留Power Automate流程,调整文件存放位置适配云连接器
如果你更倾向用Power Automate做邮件发信逻辑,不需要改动PowerShell的采集代码,只需要做两个调整:
- 把脚本导出的xlsx文件,从本地桌面移到你的OneDrive个人站点库、或者SharePoint团队文档库中,不要存在本地磁盘
- Power Automate的流程里,把「读取Excel」动作的文件位置,改成对应的云文档库地址,再加条件判断:筛选
PercentUsed >=95的条目,满足条件时触发发送邮件即可。新手不建议配置本地数据网关,额外调试成本很高
容易踩的坑
- 计算用量占比前一定要加配额为0的判断,否则遇到已注销的用户站点会触发除零错误,直接中断脚本
- 阈值判断放在采集循环里实时完成,不要等全量报表导出后再二次筛选,减少冗余处理步骤
- 发邮件时如果遇到SMTP认证报错,先检查账号是否开启了双因素验证:如果开了双因素,需要单独生成应用密码用来发信,不能直接用登录密码
内容的提问来源于stack exchange,提问作者Ullrich
相关产品推荐
相关产品推荐

