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

已完成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 18:06:07