windows 电源管理之禁用睡眠脚本

来源:互联网 发布:js 上传照片插件 编辑:程序博客网 时间:2024/04/30 09:30

最近一个项目要写一个脚本对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:代表当前的电源方案是什么?注意后面注释是平衡,表示当前处于平衡方案。通过查询powercfg -l 可以查询当前系统所有的方案。
  • 二级元素为子组GUID:一个大的集合
  • 三级元素为电池设置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 offpowercfg -q > powercfg.txt:section onefor /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find "电源方案 GUID:"') do Set StrOne=%%ifor /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find  "电源按钮和盖子"') do Set StrTwo=%%ifor /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find  "合上盖子操作"') do Set StrThree=%%iecho "####section one###"echo StrOne:%StrOne%echo StrTwo:%StrTwo%echo StrThree:%StrThree%powercfg -SETACVALUEINDEX %StrOne% %StrTwo% %StrThree% 000powercfg -SETDCVALUEINDEX %StrOne% %StrTwo% %StrThree% 000:section twofor /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find  "(电源按钮操作)"') do Set StrThree=%%iecho "####section two###"echo StrTwo:%StrTwo%echo StrThree:%StrThree%powercfg -SETACVALUEINDEX %StrOne% %StrTwo% %StrThree% 002powercfg -SETDCVALUEINDEX %StrOne% %StrTwo% %StrThree% 002:section threefor /f "tokens=3 delims= " %%i IN ('powercfg -q ^| find  "(睡眠按钮操作)"') do Set StrThree=%%iecho "####section three###"echo StrTwo:%StrThree%echo StrThree:%StrThree%powercfg -SETACVALUEINDEX %StrOne% %StrTwo% %StrThree% 002powercfg -SETDCVALUEINDEX %StrOne% %StrTwo% %StrThree% 002:section four:多久硬盘断电(0为never)powercfg -x -disk-timeout-ac 000powercfg -x -disk-timeout-dc 000:section five(never):多久睡眠powercfg -x -standby-timeout-ac 000powercfg -x -standby-timeout-dc 000pause
0 0
原创粉丝点击