定时切换电源模式并记录脚本

wen 实用脚本 2

本文目录导读:

定时切换电源模式并记录脚本

  1. 使用说明:
  2. 日志示例:
  3. 注意事项:
  4. Linux系统版本(如果需要):
# 电源模式切换脚本
# 需以管理员权限运行
# 配置参数
$切换时间 = "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

注意事项:

  1. 必须管理员权限:修改电源方案需要管理员权限
  2. 持续运行:脚本会持续运行在后台,关闭窗口即停止
  3. 时间格式:使用24小时制(如 "23:00")
  4. 电源方案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

抱歉,评论功能暂时关闭!