自动切换电源模式并优化脚本

wen 实用脚本 2

本文目录导读:

自动切换电源模式并优化脚本

  1. 自动电源模式切换优化脚本
  2. 使用说明

我来帮您创建一个自动切换电源模式并优化的脚本,以下是一个适用于Windows系统的PowerShell脚本:

自动电源模式切换优化脚本

基础版本 - PowerShell脚本

# PowerModeOptimizer.ps1
# 自动切换电源模式并优化脚本
# 获取当前电源方案
$currentPlan = powercfg /GETACTIVESCHEME
# 定义电源方案GUID
$powerPlans = @{
    "高性能" = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
    "平衡" = "381b4222-f694-41f0-9685-ff5bb260df2f"
    "节能" = "a1841308-3541-4fab-bc81-f71556f20b4a"
}
# 检测当前状态自动切换
function Auto-SwitchPowerMode {
    param(
        [string]$Mode = "auto"
    )
    switch ($Mode) {
        "high" {
            powercfg /SETACTIVE $powerPlans["高性能"]
            Write-Host "已切换到高性能模式" -ForegroundColor Green
        }
        "balanced" {
            powercfg /SETACTIVE $powerPlans["平衡"]
            Write-Host "已切换到平衡模式" -ForegroundColor Yellow
        }
        "power-saver" {
            powercfg /SETACTIVE $powerPlans["节能"]
            Write-Host "已切换到节能模式" -ForegroundColor Cyan
        }
        "auto" {
            # 智能检测逻辑
            $batteryStatus = (Get-WmiObject Win32_Battery).BatteryStatus
            $cpuUsage = (Get-Counter "\Processor(_Total)\% Processor Time").CounterSamples.CookedValue
            if ($batteryStatus -eq 1) {
                # 使用电池
                if ($cpuUsage -gt 70) {
                    powercfg /SETACTIVE $powerPlans["平衡"]
                    Write-Host "电池模式,CPU高负载:切换到平衡模式" -ForegroundColor Yellow
                } else {
                    powercfg /SETACTIVE $powerPlans["节能"]
                    Write-Host "电池模式,CPU低负载:切换到节能模式" -ForegroundColor Cyan
                }
            } else {
                # 接通电源
                if ($cpuUsage -gt 60) {
                    powercfg /SETACTIVE $powerPlans["高性能"]
                    Write-Host "电源模式,CPU高负载:切换到高性能模式" -ForegroundColor Green
                } else {
                    powercfg /SETACTIVE $powerPlans["平衡"]
                    Write-Host "电源模式,CPU低负载:切换到平衡模式" -ForegroundColor Yellow
                }
            }
        }
    }
}
# 优化电源设置
function Optimize-PowerSettings {
    Write-Host "正在优化电源设置..." -ForegroundColor Magenta
    # 关闭快速启动
    powercfg -H off
    Write-Host "✓ 已关闭快速启动" -ForegroundColor Green
    # 设置硬盘关闭时间
    powercfg -CHANGE -disk-timeout-dc 30
    powercfg -CHANGE -disk-timeout-ac 60
    Write-Host "✓ 已优化硬盘关闭时间" -ForegroundColor Green
    # 设置显示器关闭时间
    powercfg -CHANGE -monitor-timeout-dc 10
    powercfg -CHANGE -monitor-timeout-ac 20
    Write-Host "✓ 已优化显示器关闭时间" -ForegroundColor Green
    # 设置睡眠时间
    powercfg -CHANGE -standby-timeout-dc 60
    powercfg -CHANGE -standby-timeout-ac 120
    Write-Host "✓ 已优化睡眠等待时间" -ForegroundColor Green
    # 禁用USB选择性暂停
    powercfg -SETACVALUEINDEX SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
    powercfg -SETDCVALUEINDEX SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
    Write-Host "✓ 已禁用USB选择性暂停" -ForegroundColor Green
    return $true
}
# 主程序
function Main {
    param(
        [string]$Mode = "auto"
    )
    Clear-Host
    Write-Host "===== 自动电源模式切换与优化工具 =====" -ForegroundColor White
    Write-Host "版本 1.0`n" -ForegroundColor Gray
    # 检测电源状态
    $battery = Get-WmiObject Win32_Battery
    if ($battery) {
        $chargePercent = $battery.EstimatedChargeRemaining
        Write-Host "[电源状态] 当前电量: $chargePercent%"
        if ($battery.BatteryStatus -eq 1) {
            Write-Host "[电源状态] 运行模式: 电池供电" -ForegroundColor Yellow
        } else {
            Write-Host "[电源状态] 运行模式: 接通电源" -ForegroundColor Green
        }
    } else {
        Write-Host "[电源状态] 未检测到电池" -ForegroundColor Gray
    }
    # 获取CPU使用率
    $cpuUsage = (Get-Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1).CounterSamples.CookedValue
    Write-Host "[系统负载] CPU使用率: $([Math]::Round($cpuUsage, 1))%`n"
    # 执行模式切换
    Auto-SwitchPowerMode -Mode $Mode
    # 执行优化
    if (Optimize-PowerSettings) {
        Write-Host "`n✓ 电源设置优化完成" -ForegroundColor Green
    }
    # 显示当前模式
    Write-Host "`n当前活动电源方案:" -ForegroundColor White
    powercfg /GETACTIVESCHEME | Select-String -Pattern "\(.*\)" | ForEach-Object { 
        $_.Matches[0].Value -replace '\(|\)' 
    }
}
# 运行主程序
Main -Mode $args[0]

高级版本 - 带GUI界面

# PowerModeGUI.ps1
# 图形界面版本
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = "电源模式优化工具"
$form.Size = New-Object System.Drawing.Size(400, 300)
$form.StartPosition = "CenterScreen"
# 创建标签
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10, 20)
$label.Size = New-Object System.Drawing.Size(380, 30)
$label.Text = "选择电源模式:"
$form.Controls.Add($label)
# 创建下拉菜单
$comboBox = New-Object System.Windows.Forms.ComboBox
$comboBox.Location = New-Object System.Drawing.Point(10, 50)
$comboBox.Size = New-Object System.Drawing.Size(260, 30)
$comboBox.Items.AddRange(@("自动切换", "高性能模式", "平衡模式", "节能模式"))
$comboBox.SelectedIndex = 0
$form.Controls.Add($comboBox)
# 创建按钮
$button = New-Object System.Windows.Forms.Button
$button.Location = New-Object System.Drawing.Point(280, 50)
$button.Size = New-Object System.Drawing.Size(100, 30)
$button.Text = "应用"
$form.Controls.Add($button)
# 创建状态文本框
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10, 100)
$textBox.Size = New-Object System.Drawing.Size(370, 150)
$textBox.Multiline = $true
$textBox.ScrollBars = "Vertical"
$form.Controls.Add($textBox)
# 按钮事件
$button.Add_Click({
    $textBox.Clear()
    $textBox.AppendText("正在应用设置...`r`n")
    switch ($comboBox.SelectedIndex) {
        0 {
            # 自动切换
            # 实现自动检测逻辑
            $textBox.AppendText("已选择自动切换模式`r`n")
        }
        1 {
            powercfg /SETACTIVE "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
            $textBox.AppendText("已切换到高性能模式`r`n")
        }
        2 {
            powercfg /SETACTIVE "381b4222-f694-41f0-9685-ff5bb260df2f"
            $textBox.AppendText("已切换到平衡模式`r`n")
        }
        3 {
            powercfg /SETACTIVE "a1841308-3541-4fab-bc81-f71556f20b4a"
            $textBox.AppendText("已切换到节能模式`r`n")
        }
    }
    # 显示当前状态
    $currentPlan = powercfg /GETACTIVESCHEME
    $textBox.AppendText("`r`n当前电源方案: $currentPlan")
    $textBox.AppendText("`r`n优化完成!")
})
$form.ShowDialog()

计划任务脚本(自动化运行)

# 创建计划任务 - 每30分钟自动切换
$taskName = "AutoPowerModeOptimizer"
# 创建任务
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-WindowStyle Hidden -File `"C:\Scripts\PowerModeOptimizer.ps1`" -Mode auto"
$trigger = New-ScheduledTaskTrigger -Daily -At "08:00" -RepetitionInterval (New-TimeSpan -Minutes 30) -RepetitionDuration ([TimeSpan]::MaxValue)
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -User "SYSTEM"
Write-Host "计划任务已创建: $taskName" -ForegroundColor Green

使用说明

基本使用

  1. 手动运行脚本

    # 以管理员身份运行
    .\PowerModeOptimizer.ps1 auto
    # 或指定模式
    .\PowerModeOptimizer.ps1 high
  2. 自动优化

    • 脚本会自动检测电源状态(电池/电源)和CPU负载
    • 根据当前状态智能切换最佳电源模式
  3. 计划任务

    可以使用提供的计划任务脚本实现定时自动切换

✅ 关闭快速启动
✅ 优化硬盘关闭时间
✅ 优化显示器关闭时间
✅ 优化睡眠设置
✅ 禁用USB选择性暂停
✅ 智能CPU负载检测

注意事项

⚠️ 需要管理员权限运行
⚠️ 建议先测试不同场景下的表现
⚠️ 可根据需求调整GUID和优化参数

这个脚本可以根据您的具体需求进行定制和优化,如需特定功能可以进一步调整。

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