最近一个项目要写一个脚本对windows中睡眠功能禁用掉,对这个内容网上资料不多,所以做个分享。
首先要明确两个概念,休眠(hibernate)、睡眠(stand by)和混合睡眠三种概念。
休眠
休眠是指操作系统将内容中的数据存储到硬盘的swap分区下,存储完成之后,系统断电。下次按电源键时,系统重新从BIOS开始引导,然后在系统完全启动时,windows读取swap分区中的数据,并将其恢复到内存中,此时和休眠前状态一模一样。
睡眠
睡眠是指操作系统为了省电,而将硬盘断电,而内存数据不断电,内存不断电,所以内存数据不会丢失,在睡眠状态下,系统可以迅速恢复(因为数据都在内存)。因为硬盘耗电量远大于内存,因此这种方式可以达到耗电极小的程度。
混合睡眠
混合睡眠是综合了休眠和睡眠的特点,即windows将内存的数据copy一份到硬盘swap分区,硬盘断电,内存不断电。这样的好处是既满足了系统快速启动的特点(睡眠),又满足了系统断点之后数据不会丢失的特点(休眠)。当这种状态下,系统断电后,内存数据丢失,但是由于硬盘中有相同的copy,因此启动之后还是可以恢复状态。
电源管理一般是采用powercfg命令,具体命令的参数参考:[powercfg参考](https://technet.microsoft.com/en-us/library/cc748940%28v=ws.10%29.aspx)
首先看一下powercfg -q命令,该命令是查询当前电源项参数,下面是我的参数内容(powercfg -q > powercfg.txt)
电源方案 GUID: 381b4222-f694-41f0-9685-ff5bb260df2e (平衡)
GUID 别名: SCHEME_BALANCED
子组 GUID: fea3413e-7e05-4911-9a71-700331f1c294 (不属于任何子组的设置)
GUID 别名: SUB_NONE
电源设置 GUID: 0e796bdb-100d-47d6-a2d5-f7d2daa51f51 (唤醒时需要密码)
GUID 别名: CONSOLELOCK
可能的设置索引: 000
可能的设置友好名称: 否
可能的设置索引: 001
可能的设置友好名称: 是
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000001
子组 GUID: 0012ee47-9041-4b5d-9b77-535fba8b1442 (硬盘)
GUID 别名: SUB_DISK
电源设置 GUID: 6738e2c4-e8a5-4a42-b16a-e040e769756e (在此时间后关闭硬盘)
GUID 别名: DISKIDLE
最小可能的设置: 0x00000000
最大可能的设置: 0xffffffff
可能的设置增量: 0x00000001
可能的设置单位: 秒
当前交流电源设置索引: 0x0000ea24
当前直流电源设置索引: 0x0000ea24
子组 GUID: 02f815b5-a5cf-4c84-bf20-649d1f75d3d8 (Internet Explorer)
电源设置 GUID: 4c793e7d-a264-42e1-87d3-7a0d2f523ccd (JavaScript 计时器频率)
可能的设置索引: 000
可能的设置友好名称: 最大电源节省量
可能的设置索引: 001
可能的设置友好名称: 最高性能
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000000
子组 GUID: 0d7dbae2-4294-402a-ba8e-26777e8488cd (桌面背景设置)
电源设置 GUID: 309dce9b-bef4-4119-9921-a851fb12f0f4 (放映幻灯片)
可能的设置索引: 000
可能的设置友好名称: 可用
可能的设置索引: 001
可能的设置友好名称: 暂停
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000001
子组 GUID: 19cbb8fa-5279-450e-9fac-8a3d5fedd0c1 (无线适配器设置)
电源设置 GUID: 12bbebe6-58d6-4636-95bb-3217ef867c1a (节能模式)
可能的设置索引: 000
可能的设置友好名称: 最高性能
可能的设置索引: 001
可能的设置友好名称: 低节能
可能的设置索引: 002
可能的设置友好名称: 中等节能
可能的设置索引: 003
可能的设置友好名称: 最高节能
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000002
子组 GUID: 238c9fa8-0aad-41ed-83f4-97be242c8f20 (睡眠)
GUID 别名: SUB_SLEEP
电源设置 GUID: 29f6c1db-86da-48c5-9fdb-f2b67b1f44da (在此时间后睡眠)
GUID 别名: STANDBYIDLE
最小可能的设置: 0x00000000
最大可能的设置: 0xffffffff
可能的设置增量: 0x00000001
可能的设置单位: 秒
当前交流电源设置索引: 0x0000ea24
当前直流电源设置索引: 0x0000ea24
电源设置 GUID: 94ac6d29-73ce-41a6-809f-6363ba21b47e (允许混合睡眠)
GUID 别名: HYBRIDSLEEP
可能的设置索引: 000
可能的设置友好名称: 关闭
可能的设置索引: 001
可能的设置友好名称: 启用
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000001
电源设置 GUID: 9d7815a6-7ee4-497e-8888-515a05f02364 (在此时间后休眠)
GUID 别名: HIBERNATEIDLE
最小可能的设置: 0x00000000
最大可能的设置: 0xffffffff
可能的设置增量: 0x00000001
可能的设置单位: 秒
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000000
电源设置 GUID: bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d (允许使用唤醒定时器)
GUID 别名: RTCWAKE
可能的设置索引: 000
可能的设置友好名称: 禁用
可能的设置索引: 001
可能的设置友好名称: 启用
可能的设置索引: 002
可能的设置友好名称: 仅限重要的唤醒计算器
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000001
子组 GUID: 2a737441-1930-4402-8d77-b2bebba308a3 (USB 设置)
电源设置 GUID: 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 (USB 选择性暂停设置)
可能的设置索引: 000
可能的设置友好名称: 已禁用
可能的设置索引: 001
可能的设置友好名称: 已启用
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000001
子组 GUID: 2e601130-5351-4d9d-8e04-252966bad054 (空闲复原)
GUID 别名: SUB_IR
子组 GUID: 48672f38-7a9a-4bb2-8bf8-3d85be19de4e (中断路由控制设置)
GUID 别名: SUB_INTSTEER
子组 GUID: 4f971e89-eebd-4455-a8de-9e59040e7347 (电源按钮和盖子)
GUID 别名: SUB_BUTTONS
电源设置 GUID: 5ca83367-6e45-459f-a27b-476b1d01c936 (合上盖子操作)
GUID 别名: LIDACTION
可能的设置索引: 000
可能的设置友好名称: 不采取任何操作
可能的设置索引: 001
可能的设置友好名称: 睡眠
可能的设置索引: 002
可能的设置友好名称: 休眠
可能的设置索引: 003
可能的设置友好名称: 关机
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000000
电源设置 GUID: 7648efa3-dd9c-4e3e-b566-50f929386280 (电源按钮操作)
GUID 别名: PBUTTONACTION
可能的设置索引: 000
可能的设置友好名称: 不采取任何操作
可能的设置索引: 001
可能的设置友好名称: 睡眠
可能的设置索引: 002
可能的设置友好名称: 休眠
可能的设置索引: 003
可能的设置友好名称: 关机
可能的设置索引: 004
可能的设置友好名称: 关闭显示器
当前交流电源设置索引: 0x00000002
当前直流电源设置索引: 0x00000002
电源设置 GUID: 96996bc0-ad50-47ec-923b-6f41874dd9eb (睡眠按钮操作)
GUID 别名: SBUTTONACTION
可能的设置索引: 000
可能的设置友好名称: 不采取任何操作
可能的设置索引: 001
可能的设置友好名称: 睡眠
可能的设置索引: 002
可能的设置友好名称: 休眠
可能的设置索引: 003
可能的设置友好名称: 关机
可能的设置索引: 004
可能的设置友好名称: 关闭显示器
当前交流电源设置索引: 0x00000002
当前直流电源设置索引: 0x00000002
电源设置 GUID: a7066653-8d6c-40a8-910e-a1f54b84c7e5 (「开始」菜单电源按钮)
GUID 别名: UIBUTTON_ACTION
可能的设置索引: 000
可能的设置友好名称: 睡眠
可能的设置索引: 001
可能的设置友好名称: 休眠
可能的设置索引: 002
可能的设置友好名称: 关机
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000000
子组 GUID: 501a4d13-42af-4429-9fd1-a8218c268e20 (PCI Express)
GUID 别名: SUB_PCIEXPRESS
电源设置 GUID: ee12f906-d277-404b-b6da-e5fa1a576df5 (链接状态电源管理)
GUID 别名: ASPM
可能的设置索引: 000
可能的设置友好名称: 关闭
可能的设置索引: 001
可能的设置友好名称: 中等电源节省量
可能的设置索引: 002
可能的设置友好名称: 最大电源节省量
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000002
子组 GUID: 54533251-82be-4824-96c1-47b60b740d00 (处理器电源管理)
GUID 别名: SUB_PROCESSOR
电源设置 GUID: 893dee8e-2bef-41e0-89c6-b55d0929964c (最小处理器状态)
GUID 别名: PROCTHROTTLEMIN
最小可能的设置: 0x00000000
最大可能的设置: 0x00000064
可能的设置增量: 0x00000001
可能的设置单位: %
当前交流电源设置索引: 0x00000005
当前直流电源设置索引: 0x00000005
电源设置 GUID: 94d3a615-a899-4ac5-ae2b-e4d8f634367f (系统散热方式)
GUID 别名: SYSCOOLPOL
可能的设置索引: 000
可能的设置友好名称: 被动
可能的设置索引: 001
可能的设置友好名称: 主动
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000000
电源设置 GUID: bc5038f7-23e0-4960-96da-33abaf5935ec (最大处理器状态)
GUID 别名: PROCTHROTTLEMAX
最小可能的设置: 0x00000000
最大可能的设置: 0x00000064
可能的设置增量: 0x00000001
可能的设置单位: %
当前交流电源设置索引: 0x00000064
当前直流电源设置索引: 0x00000064
子组 GUID: 7516b95f-f776-4464-8c53-06167f40cc99 (显示)
GUID 别名: SUB_VIDEO
电源设置 GUID: 3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e (在此时间后关闭显示)
GUID 别名: VIDEOIDLE
最小可能的设置: 0x00000000
最大可能的设置: 0xffffffff
可能的设置增量: 0x00000001
可能的设置单位: 秒
当前交流电源设置索引: 0x00000258
当前直流电源设置索引: 0x0000012c
电源设置 GUID: aded5e82-b909-4619-9949-f5d71dac0bcb (显示器亮度)
最小可能的设置: 0x00000000
最大可能的设置: 0x00000064
可能的设置增量: 0x00000001
可能的设置单位: %
当前交流电源设置索引: 0x00000064
当前直流电源设置索引: 0x00000028
电源设置 GUID: f1fbfde2-a960-4165-9f88-50667911ce96 (显示器亮度变暗)
最小可能的设置: 0x00000000
最大可能的设置: 0x00000064
可能的设置增量: 0x00000001
可能的设置单位: %
当前交流电源设置索引: 0x00000032
当前直流电源设置索引: 0x00000032
电源设置 GUID: fbd9aa66-9553-4097-ba44-ed6e9d65eab8 (启用自适应亮度)
GUID 别名: ADAPTBRIGHT
可能的设置索引: 000
可能的设置友好名称: 关闭
可能的设置索引: 001
可能的设置友好名称: 启用
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000000
子组 GUID: 8619b916-e004-4dd8-9b66-dae86f806698 (状态感知电源操作)
GUID 别名: SUB_PRESENCE
子组 GUID: 9596fb26-9850-41fd-ac3e-f7c3c00afd4b (“多媒体”设置)
电源设置 GUID: 03680956-93bc-4294-bba6-4e0f09bb717f (共享媒体时)
可能的设置索引: 000
可能的设置友好名称: 允许计算机睡眠
可能的设置索引: 001
可能的设置友好名称: 阻止计算机在一段时间不活动后进入睡眠状态
可能的设置索引: 002
可能的设置友好名称: 允许计算机进入离开模式
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000000
电源设置 GUID: 34c7b99f-9a6d-4b3c-8dc7-b6693b78cef4 (播放视频时)
可能的设置索引: 000
可能的设置友好名称: 优化视频质量
可能的设置索引: 001
可能的设置友好名称: 平衡
可能的设置索引: 002
可能的设置友好名称: 优化节能
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000001
子组 GUID: e276e160-7cb0-43c6-b20b-73f5dce39954
子组 GUID: e73a048d-bf27-4f12-9731-8b2076e8891f (电池)
GUID 别名: SUB_BATTERY
电源设置 GUID: 637ea02f-bbcb-4015-8e2c-a1c7b9c0b546 (关键级别电池操作)
GUID 别名: BATACTIONCRIT
可能的设置索引: 000
可能的设置友好名称: 不采取任何操作
可能的设置索引: 001
可能的设置友好名称: 睡眠
可能的设置索引: 002
可能的设置友好名称: 休眠
可能的设置索引: 003
可能的设置友好名称: 关机
当前交流电源设置索引: 0x00000002
当前直流电源设置索引: 0x00000002
电源设置 GUID: 8183ba9a-e910-48da-8769-14ae6dc1170a (电池电量水平低)
GUID 别名: BATLEVELLOW
最小可能的设置: 0x00000000
最大可能的设置: 0x00000064
可能的设置增量: 0x00000001
可能的设置单位: %
当前交流电源设置索引: 0x0000000a
当前直流电源设置索引: 0x0000000a
电源设置 GUID: 9a66d8d7-4ff7-4ef9-b5a2-5a326ca2a469 (关键电池电量水平)
GUID 别名: BATLEVELCRIT
最小可能的设置: 0x00000000
最大可能的设置: 0x00000064
可能的设置增量: 0x00000001
可能的设置单位: %
当前交流电源设置索引: 0x00000005
当前直流电源设置索引: 0x00000005
电源设置 GUID: bcded951-187b-4d05-bccc-f7e51960c258 (低电量通知)
GUID 别名: BATFLAGSLOW
可能的设置索引: 000
可能的设置友好名称: 关闭
可能的设置索引: 001
可能的设置友好名称: 启用
当前交流电源设置索引: 0x00000001
当前直流电源设置索引: 0x00000001
电源设置 GUID: d8742dcb-3e6a-4b3c-b3fe-374623cdcf06 (低电量操作)
GUID 别名: BATACTIONLOW
可能的设置索引: 000
可能的设置友好名称: 不采取任何操作
可能的设置索引: 001
可能的设置友好名称: 睡眠
可能的设置索引: 002
可能的设置友好名称: 休眠
可能的设置索引: 003
可能的设置友好名称: 关机
当前交流电源设置索引: 0x00000000
当前直流电源设置索引: 0x00000000
电源设置 GUID: f3c5027d-cd16-4930-aa6b-90db844a8f00 (保留电池电量)
最小可能的设置: 0x00000000
最大可能的设置: 0x00000064
可能的设置增量: 0x00000001
可能的设置单位: %
当前交流电源设置索引: 0x00000007
当前直流电源设置索引: 0x00000007
内容很长,但是我觉得首先要看明白它的结构,然后才能明白下面的命令到底啥意思。这个文件其实和XML文件结构很像。
三级元素为电池设置GUID:具体的参数含义
举例如下
电源设置 GUID: 637ea02f-bbcb-4015-8e2c-a1c7b9c0b546 (关键级别电池操作)
GUID 别名: BATACTIONCRIT
可能的设置索引: 000
可能的设置友好名称: 不采取任何操作
可能的设置索引: 001
可能的设置友好名称: 睡眠
可能的设置索引: 002
可能的设置友好名称: 休眠
可能的设置索引: 003
可能的设置友好名称: 关机
当前交流电源设置索引: 0x00000002
当前直流电源设置索引: 0x00000002
可能的设置索引指明了可以使用的值范围,而当前*流电源设置索引表示交/直流电源设置值。
所以如果希望更改关键级别电池操作的值为关机,那么命令如下所示。
powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e(根) e73a048d-bf27-4f12-9731-8b2076e8891f(二级) 637ea02f-bbcb-4015-8e2c-a1c7b9c0b546(三级) 003
禁止睡眠的脚本如下所示,需要注意的是,要将这个脚本的编码设置为GB2312的编码,否则cmd中不认识UTF-8格式的汉字(编码问题非常蛋疼!!)
@echo off
powercfg -q > powercfg.txt
:section one
for /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find "电源方案 GUID:"') do Set StrOne=%%i
for /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find "电源按钮和盖子"') do Set StrTwo=%%i
for /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find "合上盖子操作"') do Set StrThree=%%i
echo "####section one###"
echo StrOne:%StrOne%
echo StrTwo:%StrTwo%
echo StrThree:%StrThree%
powercfg -SETACVALUEINDEX %StrOne% %StrTwo% %StrThree% 000
powercfg -SETDCVALUEINDEX %StrOne% %StrTwo% %StrThree% 000
:section two
for /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find "(电源按钮操作)"') do Set StrThree=%%i
echo "####section two###"
echo StrTwo:%StrTwo%
echo StrThree:%StrThree%
powercfg -SETACVALUEINDEX %StrOne% %StrTwo% %StrThree% 002
powercfg -SETDCVALUEINDEX %StrOne% %StrTwo% %StrThree% 002
:section three
for /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find "(睡眠按钮操作)"') do Set StrThree=%%i
echo "####section three###"
echo StrTwo:%StrThree%
echo StrThree:%StrThree%
powercfg -SETACVALUEINDEX %StrOne% %StrTwo% %StrThree% 002
powercfg -SETDCVALUEINDEX %StrOne% %StrTwo% %StrThree% 002
:section four
:多久硬盘断电(0为never)
powercfg -x -disk-timeout-ac 000
powercfg -x -disk-timeout-dc 000
:section five(never)
:多久睡眠
powercfg -x -standby-timeout-ac 000
powercfg -x -standby-timeout-dc 000
pause