本文目录导读:

# 电源模式切换脚本
# 需以管理员权限运行
# 配置参数
$切换时间 = "23:00" # 24小时制时间(时:分)
$目标模式 = "powersave" # 可选:balanced / highperformance / powersave
$日志路径 = "C:\PowerSwitcher\switch_log.txt"
# 确保日志目录存在
$日志目录 = Split-Path $日志路径 -Parent
if (-not (Test-Path $日志目录)) {
New-Item -ItemType Directory -Path $日志目录 -Force
}
# 记录日志函数
function Write-Log {
param($Message)
$日志时间 = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$日志时间 - $Message" | Out-File -FilePath $日志路径 -Append -Encoding UTF8
Write-Host "$日志时间 - $Message"
}
# 设置电源模式函数
function Set-PowerMode {
param([string]$Mode)
try {
switch ($Mode) {
"balanced" {
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
}
"highperformance" {
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
}
"powersave" {
powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a
}
default {
throw "不支持的电源模式: $Mode"
}
}
Write-Log "电源模式已切换到: $Mode"
return $true
}
catch {
Write-Log "切换失败: $($_.Exception.Message)"
return $false
}
}
# 主循环
Write-Log "电源模式切换服务启动"
Write-Log "目标时间: $切换时间, 目标模式: $目标模式"
while ($true) {
$当前时间 = Get-Date
$目标时间对象 = Get-Date -Hour ($切换时间 -split ":")[0] -Minute ($切换时间 -split ":")[1] -Second 0
# 如果目标时间已过,设置到第二天
if ($当前时间 -gt $目标时间对象) {
$目标时间对象 = $目标时间对象.AddDays(1)
}
$等待时间 = ($目标时间对象 - $当前时间).TotalSeconds
if ($等待时间 -gt 0) {
Write-Log "距离下次切换还有 $([math]::Round($等待时间/60,1)) 分钟"
Start-Sleep -Seconds $等待时间
Set-PowerMode -Mode $目标模式
}
# 等待1分钟避免重复触发
Start-Sleep -Seconds 60
}
使用说明:
保存脚本保存为 PowerSwitcher.ps1
修改配置
根据需要修改脚本头部的配置参数:
$切换时间- 切换时间(24小时制)$目标模式- 电源模式(balanced/highperformance/powersave)$日志路径- 日志文件保存位置
运行脚本
需要以管理员权限运行!
# 方法1:右键点击脚本文件 -> "使用 PowerShell 运行" # 方法2:在管理员 PowerShell 中执行 .\PowerSwitcher.ps1
设置开机自启(可选)
将脚本添加到任务计划程序:
# 创建计划任务(管理员权限) $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"C:\PowerSwitcher.ps1`"" $trigger = New-ScheduledTaskTrigger -AtStartup $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "PowerModeSwitcher" -Action $action -Trigger $trigger -Principal $principal
日志示例:
2024-01-15 22:00:00 - 电源模式切换服务启动
2024-01-15 22:00:00 - 目标时间: 23:00, 目标模式: powersave
2024-01-15 22:00:00 - 距离下次切换还有 60.0 分钟
2024-01-15 23:00:00 - 电源模式已切换到: powersave
注意事项:
- 必须管理员权限:修改电源方案需要管理员权限
- 持续运行:脚本会持续运行在后台,关闭窗口即停止
- 时间格式:使用24小时制(如 "23:00")
- 电源方案GUID:
- 平衡: 381b4222-f694-41f0-9685-ff5bb260df2e
- 高性能: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
- 节能: a1841308-3541-4fab-bc81-f71556f20b4a
Linux系统版本(如果需要):
#!/bin/bash
# 配置
TARGET_TIME="23:00"
TARGET_MODE="powersave"
LOG_FILE="/var/log/power_switch.log"
# 日志函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# 设置电源模式
set_power_mode() {
case $1 in
"balanced")
cpupower frequency-set -g ondemand
;;
"highperformance")
cpupower frequency-set -g performance
;;
"powersave")
cpupower frequency-set -g powersave
;;
*)
log "不支持的电源模式: $1"
return 1
;;
esac
log "电源模式已切换到: $1"
}
log "电源模式切换服务启动"
log "目标时间: $TARGET_TIME, 目标模式: $TARGET_MODE"
while true; do
CURRENT_TIME=$(date +%H:%M)
if [ "$CURRENT_TIME" == "$TARGET_TIME" ]; then
set_power_mode "$TARGET_MODE"
sleep 60
fi
sleep 30
done