可通过PowerShell远程执行WMI或PowerCfg命令批量配置电源计划,需先启用WinRM、放行防火墙端口5985/5986,并确保执行账户具有远程主机管理员权限。
可以通过powershell远程执行wmi或powercfg命令,批量配置目标主机的电源计划(如设为“高性能”或禁用睡眠),前提是目标主机已启用winrm、防火墙放行、且当前用户有管理员权限。
前提条件:确保远程管理环境就绪
批量操作前必须完成以下配置,否则脚本会连接失败:
- 在所有目标主机上运行 Enable-PSRemoting -Force 启用PowerShell远程处理
- 确保WinRM服务正在运行(Get-Service WinRM 返回状态为Running)
- 目标主机防火墙需放行TCP 5985(HTTP)或5986(HTTPS),推荐用 winrm quickconfig 一键配置
- 执行脚本的本地账户需对远程主机具有本地管理员权限;若跨域,建议使用受信凭据或CredSSP(需额外启用)
方法一:用Invoke-Command调用powercfg设置电源计划
PowerCfg是Windows原生命令,无需额外安装,适合快速切换预设计划(如“高性能”、“平衡”)。注意:需以管理员身份运行脚本,且远程会话默认无交互式桌面,但powercfg /s仍可生效。
示例脚本(将多台主机设为高性能计划):
$Computers = "PC01", "PC02", "SRV03"
$PlanGuid = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c" # 高性能计划GUID(可用 powercfg /list 获取)
<p>Invoke-Command -ComputerName $Computers -ScriptBlock {
powercfg /s $using:PlanGuid
Write-Host "电源计划已设为高性能:$env:COMPUTERNAME"
} -ErrorAction SilentlyContinue
提示:GUID可通过在任意一台Windows机器运行 powercfg /list 查看,带 * 号的是当前激活计划。
方法二:用WMI/CIM修改更底层的电源设置
若需精细控制(如禁用硬盘休眠、调整USB选择性暂停、设置唤醒定时器),WMI类 Win32_PowerPlan 和 Root\cimv2\power 下的设置更可靠。推荐使用 CimSession 替代旧版WMI,兼容性更好、支持TLS加密。
示例:批量禁用“USB选择性暂停”(常用于防止外设断连):
$Computers = "PC01", "PC02"
$Sessions = New-CimSession -ComputerName $Computers -ErrorAction Stop
<p>foreach ($session in $Sessions) {
$Plan = Get-CimInstance -CimSession $session -ClassName Win32_PowerPlan | Where-Object IsActive -EQ $true
$SubGroup = Get-CimInstance -CimSession $session -ClassName Win32<em>PowerSettingSubgroup |
Where-Object { $</em>.ElementName -eq "USB settings" }</p><pre class="brush:php;toolbar:false;">if ($SubGroup) {
$UsbSetting = Get-CimInstance -CimSession $session -ClassName Win32_PowerSetting |
Where-Object { $_.InstanceID -match "SUBGROUP_USB.*USB_SELECTIVE_SUSPEND" }
if ($UsbSetting) {
Invoke-CimMethod -CimSession $session -ClassName Win32_PowerSetting -MethodName SetPowerSettingValue -Arguments @{
PowerSettingId = $UsbSetting.InstanceID
PowerPlanId = $Plan.InstanceID
Value = 0 # 0=禁用,1=启用
} | Out-Null
Write-Host "已禁用USB选择性暂停:$($session.ComputerName)"
}
}} Remove-CimSession -CimSession $Sessions
增强实用性:加入错误捕获与结果汇总
生产环境中建议封装成函数,并记录成功/失败主机。例如:
function Set-RemotePowerPlan {
param([string[]]$ComputerName, [string]$PlanGuid)
$results = @()
foreach ($comp in $ComputerName) {
$status = try {
Invoke-Command -ComputerName $comp -ScriptBlock {
powercfg /s $using:PlanGuid 2>&1 | Out-Null
return "Success"
} -ErrorAction Stop
"Success"
} catch {
"Failed: $($_.Exception.Message.Substring(0, [Math]::Min(80,$_.Exception.Message.Length)))"
}
$results += [pscustomobject]@{ Computer = $comp; Status = $status }
}
return $results
}
<h1>调用并导出报表</h1><p>Set-RemotePowerPlan -ComputerName @("PC01","PC02") -PlanGuid "8c5e7fda..." | Export-Csv .\PowerPlanReport.csv -NoTypeInformation
这样既能快速定位异常节点,又便于审计和后续跟进。

















