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

如何在设备电池剩余30%时自动触发PowerShell脚本发送邮件?

实现电池电量触发PowerShell脚本的自动执行方案

下面提供两种可靠的自动触发方式,配合你的电池检测需求:

方法一:Windows任务计划程序(推荐,可视化配置)

这是最稳定的系统级触发方案,无需保持PowerShell会话:

  1. 打开任务计划程序,点击「创建任务」(功能比「创建基本任务」更完整),命名为「Battery Low Alert」
  2. 切换到「触发器」选项卡,点击「新建」:
    • 触发器类型选择「WMI事件」
    • 在「查询」框输入WQL语句:
      SELECT * FROM __InstanceModificationEvent WITHIN 60 
      WHERE TargetInstance ISA 'Win32_Battery' 
      AND TargetInstance.EstimatedChargeRemaining <= 30 
      AND TargetInstance.BatteryStatus = 1
      
      说明:WITHIN 60表示每分钟检测一次状态变化;BatteryStatus = 1对应电池放电模式(即设备用电池供电)
  3. 切换到「操作」选项卡,点击「新建」:
    • 操作类型选择「启动程序」
    • 程序/脚本填powershell.exe
    • 添加参数:-ExecutionPolicy Bypass -File "C:\你的脚本路径\BatteryAlert.ps1"(替换为实际脚本路径)
  4. 切换到「条件」选项卡:
    • 取消勾选「只有在计算机使用交流电源时才启动此任务」
    • 勾选「只有在计算机使用电池电源时才启动此任务」(双重保障,避免误触发)
  5. 切换到「设置」选项卡,按需勾选「如果任务失败,每隔5分钟重试」「允许任务按需运行」等选项,最后保存。

方法二:注册WMI事件订阅(后台实时监控)

适合轻量后台运行场景,用PowerShell直接注册系统事件:

创建监控脚本(比如BatteryMonitor.ps1):

# 定义WMI事件查询,监控电池状态变化
$query = @"
SELECT * FROM __InstanceModificationEvent WITHIN 60 
WHERE TargetInstance ISA 'Win32_Battery' 
AND TargetInstance.EstimatedChargeRemaining <= 30 
AND TargetInstance.BatteryStatus = 1
"@

# 定义触发后的动作:发送邮件
$action = {
    $computerName = $env:COMPUTERNAME
    # 替换为你的SMTP配置
    $smtpConfig = @{
        SmtpServer = "smtp.yourdomain.com"
        Port       = 587
        From       = "battery-alert@yourdomain.com"
        To         = "your-notify@email.com"
        Subject    = "[$computerName] 电池电量已降至30%"
        Body       = "设备 $computerName 当前处于电池模式,剩余电量不足30%,请及时充电。"
        UseSsl     = $true
        Credential = Import-Clixml -Path "C:\Creds\SmtpCreds.xml"
    }
    Send-MailMessage @smtpConfig

    # 避免1小时内重复发送
    $lastAlertFile = "C:\Temp\LastBatteryAlert.txt"
    if (-not (Test-Path $lastAlertFile)) { New-Item $lastAlertFile -Force | Out-Null }
    $lastAlertTime = Get-Content $lastAlertFile | Get-Date
    if ((Get-Date) - $lastAlertTime -lt (New-TimeSpan -Hours 1)) { return }
    Get-Date | Out-File $lastAlertFile -Force
}

# 注册事件订阅
Register-WmiEvent -Query $query -Action $action -SourceIdentifier "BatteryLowMonitor"

Write-Host "电池监控已启动,按Ctrl+C停止..."
# 保持会话运行
do { Start-Sleep 30 } while ($true)

使用说明:

  • 运行脚本后,PowerShell会话会保持后台监控,关闭会话则停止监控
  • 要开机自动运行,可将脚本添加到「启动」文件夹,或用任务计划设置开机启动该脚本
  • 取消监控:执行Unregister-Event -SourceIdentifier "BatteryLowMonitor"

额外优化建议

  • 替换Get-WmiObject为Get-CimInstance Win32_Battery,CIM是WMI的更新版本,兼容性和性能更好
  • 邮件凭据可提前加密存储,避免手动输入:
    Get-Credential | Export-Clixml -Path "C:\Creds\SmtpCreds.xml"
    

内容的提问来源于stack exchange,提问作者Jorge Romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:16:20