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

最近一个项目要写一个脚本对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 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

你可能感兴趣的:(想到哪写到哪)