本文目录导读:

我来为您提供几个不同场景下的自动切换电源计划脚本。
Windows PowerShell 脚本(最常用)
基本版本:根据时间切换
# 自动切换电源计划 - 根据时间段
# 以管理员身份运行
# 获取当前时间
$currentHour = Get-Date -Format "HH"
# 定义电源计划(使用GUID或名称)
$balanced = "平衡" # 平衡模式
$highPerformance = "高性能" # 高性能模式
$powerSaver = "节能" # 节能模式
# 根据时间段切换
if ($currentHour -ge 8 -and $currentHour -lt 18) {
# 工作时间(8:00-18:00)使用平衡模式
powercfg /setactive $balanced
Write-Host "已切换到平衡模式"
} elseif ($currentHour -ge 18 -or $currentHour -lt 22) {
# 晚间(18:00-22:00)使用高性能
powercfg /setactive $highPerformance
Write-Host "已切换到高性能模式"
} else {
# 深夜(22:00-8:00)使用节能
powercfg /setactive $powerSaver
Write-Host "已切到节能模式"
}
进阶版本:根据系统状态切换
# 智能电源计划切换
$batteryThreshold = 20 # 电量低于20%时切换
$cpuLoadThreshold = 30 # CPU使用率阈值
# 获取电源信息
$batteryStatus = (Get-WmiObject Win32_Battery).EstimatedChargeRemaining
# 获取系统是否使用电池
$system = Get-WmiObject -Class Win32_SystemInformation
# 判断是否使用电池
if ($system.PowerSupplies[0].Status -eq "Online") {
# 使用交流电
if (Get-Process | Sort-Object CPU | Select-Object -Last 5 |
Where-Object {$_.CPU -gt $cpuLoadThreshold}) {
# 运行重负载程序时
powercfg /setactive "高性能"
Write-Host "检测到高负载,使用高性能模式"
} else {
# 普通使用
powercfg /setactive "平衡"
Write-Host "使用平衡模式"
}
} elseif ($batteryStatus -lt $batteryThreshold) {
# 使用电池且电量低
powercfg /setactive "节能"
Write-Host "电量低于${batteryThreshold}%,切换到节能模式"
} else {
# 使用电池但电量充足
powercfg /setactive "平衡"
Write-Host "使用电池,保持平衡模式"
}
批处理脚本(CMD)
@echo off电源计划自动切换器
REM 获取当前时间
for /f "tokens=1" %%i in ("%time%") do set time=%%i
set hour=%time:~0,2%
REM 切换电源计划
if %hour% GEQ 8 if %hour% LEQ 18 (
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
echo 已切换到平衡模式
) else if %hour% GEQ 19 if %hour% LEQ 22 (
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
echo 已切换到高性能模式
) else (
powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a
echo 已切换到节能模式
)
pause
Python 脚本(更灵活)
import os
import time
import subprocess
import psutil
import logging
from datetime import datetime
class PowerPlanManager:
def __init__(self):
# 定义电源计划GUID
self.POWER_PLANS = {
"balanced": "381b4222-f694-41f0-9685-ff5bb260df2e",
"high_performance": "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c",
"power_saver": "a1841308-3541-4fab-bc81-f71556f20b4a"
}
# 设置日志
logging.basicConfig(
filename='power_plan.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def get_battery_status(self):
"""获取电池状态"""
battery = psutil.sensors_battery()
if battery:
return battery.percent, battery.power_plugged
return None, None
def set_power_plan(self, plan_name):
"""设置电源计划"""
if plan_name in self.POWER_PLANS:
cmd = f'powercfg /setactive {self.POWER_PLANS[plan_name]}'
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode == 0:
logging.info(f"切换到{plan_name}模式")
return True
else:
logging.error(f"切换失败: {result.stderr}")
return False
def smart_switch(self):
"""智能切换逻辑"""
battery_percent, is_plugged = self.get_battery_status()
current_hour = datetime.now().hour
# 基于电池状态
if not is_plugged and battery_percent and battery_percent < 20:
return self.set_power_plan("power_saver")
# 基于时间
if 8 <= current_hour <= 17:
return self.set_power_plan("balanced")
elif 17 < current_hour <= 22:
return self.set_power_plan("high_performance")
else:
return self.set_power_plan("power_saver")
def run_daemon(self, interval=60):
"""作为守护进程运行"""
print(f"电源计划管理器启动,每{interval}秒检查一次")
while True:
self.smart_switch()
time.sleep(interval)
if __name__ == "__main__":
manager = PowerPlanManager()
manager.run_daemon(interval=300) # 每5分钟检查一次
任务计划程序配合使用
创建 Windows 任务计划程序自动执行:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2024-01-01T00:00:00</Date>
<Author>YourName</Author>
</RegistrationInfo>
<Triggers>
<TimeTrigger>
<StartBoundary>2024-01-01T08:00:00</StartBoundary>
<Enabled>true</Enabled>
<Repetition>
<Interval>PT1H</Interval>
<StopAtDurationEnd>false</StopAtDurationEnd>
</Repetition>
</TimeTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<RunLevel>HighestAvailable</RunLevel>
<UserId>Administrator</UserId>
<LogonType>InteractiveToken</LogonType>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
</Settings>
<Actions>
<Exec>
<Command>powershell.exe</Command>
<Arguments>-ExecutionPolicy Bypass -File "C:\Scripts\power_switch.ps1"</Arguments>
</Exec>
</Actions>
</Task>
高级智能版本
# 综合智能电源管理脚本
param(
[int]$CheckInterval = 3000, # 默认每5秒检查一次
[switch]$Daemon # 后台运行模式
)
function Get-SystemLoad {
# 获取系统负载
$cpu = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples[0].CookedValue
$memory = (Get-Counter '\Memory\% Committed Bytes In Use').CounterSamples[0].CookedValue
return @{CPU = $cpu; Memory = $memory}
}
function Switch-PowerPlan {
param([string]$Plan)
powercfg /setactive $Plan
# 记录日志
$logDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path "power_switch.log" -Value "$logDate - 切换到 $Plan"
}
function Test-PowerPlan {
# 获取当前系统状态
$battery = Get-WmiObject -Class Win32_Battery -ErrorAction SilentlyContinue
$load = Get-SystemLoad
$hour = (Get-Date).Hour
# 决策逻辑
if ($battery.EstimatedChargeRemaining -lt 15) {
Switch-PowerPlan "a1841308-3541-4fab-bc81-f71556f20b4a" # 节能
}
elseif ($load.CPU -gt 70) {
Switch-PowerPlan "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c" # 高性能
}
elseif ($hour -ge 8 -and $hour -le 18) {
Switch-PowerPlan "381b4222-f694-41f0-9685-ff5bb260df2e" # 平衡
}
else {
# 晚上自动关闭屏幕和降低性能
powercfg /change monitor-timeout-ac 5
powercfg /change standby-timeout-ac 10
Switch-PowerPlan "a1841308-3541-4fab-bc81-f71556f20b4a" # 节能
}
}
# 主循环
if ($Daemon) {
while ($true) {
Test-PowerPlan
Start-Sleep -Milliseconds $CheckInterval
}
} else {
Test-PowerPlan
}
使用说明
- 以管理员身份运行:修改电源计划需要管理员权限
- 查看当前电源计划:使用
powercfg /list查看当前所有电源计划 - 计划任务:将脚本添加到任务计划程序中来实现自动运行
这些脚本可以根据您的具体需求进行调整,例如修改时间范围、添加特定程序检测等功能。