<#
.SYNOPSIS
自定义电源计划管理脚本
.DESCRIPTION
此脚本用于创建、切换和管理 Windows 电源计划。
支持创建基于“平衡”计划的自定义计划,或直接切换系统已有计划。
.PARAMETER Action
指定操作类型:Create, Switch, List, Current
.PARAMETER Name
自定义电源计划的名称(创建或切换时使用)
.PARAMETER Description
自定义电源计划的描述(仅创建时使用)
.EXAMPLE
.\PowerPlanManager.ps1 -Action List
列出所有电源计划
.EXAMPLE
.\PowerPlanManager.ps1 -Action Current
显示当前激活的电源计划
.EXAMPLE
.\PowerPlanManager.ps1 -Action Create -Name "我的高性能计划" -Description "自定义高性能配置"
基于平衡计划创建名为“我的高性能计划”的自定义计划
.EXAMPLE
.\PowerPlanManager.ps1 -Action Switch -Name "我的高性能计划"
切换到指定名称的电源计划
.NOTES
作者: AI 助手
需要管理员权限才能创建或切换电源计划。
#>
[CmdletBinding()]
param (
[Parameter(Mandatory = $true, Position = 0)]
[ValidateSet('Create', 'Switch', 'List', 'Current')]
[string]$Action,
[Parameter(Position = 1)]
[string]$Name,
[Parameter(Position = 2)]
[string]$Description = "由脚本创建的自定义电源计划"
)
# 检查管理员权限
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
# 辅助函数:获取所有电源计划
function Get-PowerPlans {
$plans = powercfg /list | Select-String -Pattern "^(?:现有电源方案|现有电源计划)\s*\*\s*|^(?:电源方案|电源计划)\s*\*?\s*" -NotMatch
# 兼容中英文输出
$plans = powercfg /list | ForEach-Object {
if ($_ -match '([a-f0-9\-]{36})\s+\((.*?)\)') {
[PSCustomObject]@{
Guid = $matches[1]
Name = $matches[2].Trim()
IsActive = $_ -match '^\s*\*'
}
}
}
return $plans
}
# 辅助函数:通过名称查找电源计划 GUID
function Get-PlanGuidByName {
param([string]$planName)
$plans = Get-PowerPlans
$match = $plans | Where-Object { $_.Name -eq $planName }
if ($match) {
return $match[0].Guid
}
# 尝试模糊匹配
$fuzzy = $plans | Where-Object { $_.Name -like "*$planName*" }
if ($fuzzy) {
Write-Warning "未找到完全匹配的计划,但找到模糊匹配: '$($fuzzy[0].Name)',将使用此计划。"
return $fuzzy[0].Guid
}
return $null
}
# 根据操作执行
switch ($Action) {
'List' {
Write-Host "`n=== 系统电源计划列表 ===" -ForegroundColor Cyan
$plans = Get-PowerPlans
if (-not $plans) {
Write-Warning "未找到任何电源计划。"
} else {
$plans | ForEach-Object {
$activeFlag = if ($_.IsActive) { " (当前激活)" } else { "" }
Write-Host " $($_.Name)$activeFlag" -ForegroundColor $(
if ($_.IsActive) { 'Green' } else { 'White' }
)
Write-Host " GUID: $($_.Guid)" -ForegroundColor Gray
}
}
break
}
'Current' {
Write-Host "`n=== 当前激活的电源计划 ===" -ForegroundColor Cyan
$plans = Get-PowerPlans
$active = $plans | Where-Object { $_.IsActive }
if ($active) {
Write-Host " 名称: $($active.Name)" -ForegroundColor Green
Write-Host " GUID : $($active.Guid)" -ForegroundColor Gray
} else {
Write-Warning "无法确定当前电源计划。"
}
break
}
'Create' {
if (-not $isAdmin) {
Write-Error "创建电源计划需要管理员权限,请以管理员身份运行此脚本。"
exit 1
}
if (-not $Name) {
Write-Error "创建计划时必须指定 -Name 参数。"
exit 1
}
# 检查是否已存在同名计划
$existing = Get-PlanGuidByName -planName $Name
if ($existing) {
Write-Warning "已存在名为 '$Name' 的电源计划 (GUID: $existing)。"
$confirm = Read-Host "是否仍要创建? (y/N, 默认 N)"
if ($confirm -ne 'y' -and $confirm -ne 'Y') {
Write-Host "操作已取消。" -ForegroundColor Yellow
exit 0
}
}
Write-Host "`n正在创建自定义电源计划: $Name" -ForegroundColor Cyan
Write-Host "描述: $Description" -ForegroundColor Gray
# 获取平衡计划的 GUID (首选 GUID: 381b4222-f694-41f0-9685-ff5bb260df2e)
$balancedGuid = "381b4222-f694-41f0-9685-ff5bb260df2e"
$balancedPlan = Get-PowerPlans | Where-Object { $_.Guid -eq $balancedGuid }
if (-not $balancedPlan) {
# 如果标准 GUID 不存在,尝试查找名称包含 "平衡" 的计划
$balancedPlan = Get-PowerPlans | Where-Object { $_.Name -match '平衡|Balanced' } | Select-Object -First 1
}
if (-not $balancedPlan) {
Write-Error "无法找到“平衡”电源计划 (GUID: $balancedGuid),请检查系统。"
exit 1
}
Write-Host "基于计划: $($balancedPlan.Name) ($($balancedPlan.Guid))" -ForegroundColor Green
# 创建新计划 (复制平衡计划)
$createOutput = powercfg /duplicatescheme $balancedPlan.Guid 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Error "复制电源计划失败: $createOutput"
exit 1
}
# 从输出中提取新 GUID (输出格式类似: "电源方案 GUID: xxxxxx 已复制...")
$newGuid = $null
if ($createOutput -match '([a-f0-9\-]{36})') {
$newGuid = $matches[1]
}
if (-not $newGuid) {
# 如果无法从输出提取,尝试从列表获取最新的计划(通常新计划排在最后)
Start-Sleep -Milliseconds 200
$allPlans = Get-PowerPlans
$newPlan = $allPlans | Where-Object { $_.Name -notin @('高性能', '平衡', '节能', 'High performance', 'Balanced', 'Power saver') -and $_.Name -ne $balancedPlan.Name } | Select-Object -Last 1
if ($newPlan) {
$newGuid = $newPlan.Guid
}
else {
Write-Error "无法自动获取新创建的电源计划 GUID,请手动检查。"
exit 1
}
}
# 重命名并设置描述
powercfg /changename $newGuid $Name $Description | Out-Null
if ($LASTEXITCODE -eq 0) {
Write-Host "成功创建自定义电源计划!" -ForegroundColor Green
Write-Host " 名称: $Name" -ForegroundColor White
Write-Host " GUID: $newGuid" -ForegroundColor Gray
} else {
Write-Error "重命名电源计划时出错,但计划可能已创建,GUID: $newGuid"
}
break
}
'Switch' {
if (-not $isAdmin) {
Write-Error "切换电源计划需要管理员权限,请以管理员身份运行此脚本。"
exit 1
}
if (-not $Name) {
Write-Error "切换计划时请指定 -Name 参数(计划名称或部分名称)。"
exit 1
}
$guid = Get-PlanGuidByName -planName $Name
if (-not $guid) {
Write-Error "未找到名称为 '$Name' 的电源计划,请使用 -Action List 查看所有计划。"
exit 1
}
Write-Host "正在切换到电源计划: $Name (GUID: $guid)" -ForegroundColor Cyan
$switchOutput = powercfg /setactive $guid 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host "成功切换到计划: $Name" -ForegroundColor Green
} else {
Write-Error "切换失败: $switchOutput"
}
break
}
default {
Write-Host "未知操作,可用操作: Create, Switch, List, Current" -ForegroundColor Yellow
}
}
电源计划管理功能说明
您可以通过四个核心操作来管理电源计划,每个操作都配有清晰的反馈。

- 查看与诊断:使用
List和Current操作可以快速浏览系统所有电源计划及其激活状态,方便您进行决策。 - 创建自定义计划:
Create操作会基于系统内置的“平衡”计划复制一份,并允许您为新计划设置名称和描述,实现个性化配置。 - 快速切换:
Switch操作支持按计划名称或部分名称进行模糊匹配切换,无需记忆复杂的GUID。 - 权限与安全:脚本在创建或切换计划时会自动检查管理员权限,并在关键操作前进行确认,避免误操作。
优化建议: 您可以根据需要调整 $Description 变量的默认值(第23行),或修改 Create 操作中基于的计划(默认使用“平衡”计划)。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播