sergey vasin

The IT blog

Используем PowerShell для определения режима питания и установки плана электропитания – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об определении текущего режима питания и установки плана электропитания на ноутбуке при помощи Windows PowerShell.

Определяем режим электропитания

Для определения того, работает ли мой ноутбук от аккумулятора или нет, я могу запросить WMI-класс Win32_Battery. Этот класс находится в пространстве имен Root\CimV2 и был там испокон веков. В нем нет ничего особенного. Единственное, нужно убедиться, что мой ноутбук действительно возвращает информацию при запросе этого класса – и является ли эта информация достоверной.

В прошлом у меня были ноутбуки, которые не вовсе не выводили информацию при запросе Win32_Battery, если ноутбук был подключен к электросети – она становилась доступной только тогда, когда ноутбук работал от аккумулятора. Но есть еще один WMI-класс – Win32_PortableBattery. Этот класс также наследуется от класса Cim_Battery, но он предоставляет чуть больше информации, нежели Win32_Battery. С другой стороны, Win32_Battery предоставляет информацию о состоянии зарядки. Отличия между классами приведены ниже.

PS C:\> $b = Get-CimClass win32_battery

PS C:\> $p = Get-CimClass win32_portablebattery

PS C:\> Compare-Object $b.CimClassProperties.name $p.CimClassProperties.name

InputObject                                SideIndicator

————                                ————-

CapacityMultiplier                         =>

Location                                   =>

ManufactureDate                            =>

Manufacturer                               =>

MaxBatteryError                            =>

BatteryRechargeTime                        <=

ExpectedBatteryLife                        <=

The battery is discharging

Если ноутбук работает от аккумулятора, свойство BatteryStatus принимает значение 1, что означает, что «Батарея разряжается».

Остальные условия чуть более сложные. Следующая таблица содержит значения состояний аккумулятора.

Value Meaning
1 The battery is discharging.
2 The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging.
3 Fully Charged
4 Low
5 Critical
6 Charging
7 Charging and High
8 Charging and Low
9 Charging and Critical
10 Undefined
11 Partially Charged

В моем случае, я воспользуюсь значениями сродни булевой логике – 1 означает, что ноутбук работает от аккумулятора, все остальное – ноутбук работает от электросети (по крайней мере для целей моего скрипта). Состояние аккумулятора я буду получать следующим образом:

(Get-CimInstance win32_battery).batterystatus

Устанавливаем необходимый план электропитания

Для установки плана электропитания я воспользуюсь классом WMI Win32_PowerPlan (как и во вчерашней статье), и вызову метод Activate. Все что мне нужно сделать, это добавить в скрипт немного логики, затем получить необходимый план электропитания и активировать его. Я решил, что, если батарея разряжается (значение 1), я буду использовать план «Power Saver», если батарея заряжена полностью (значение 3) – «High Performance», и в любом другом случае я буду использовать план «Balanced». Для этого я использую простую конструкцию If/ElseIf/Else.

SetPowerSaverPlan.ps1

If ((Get-CimInstance win32_battery).batterystatus -eq 1)

  {

   $p = Get-CimInstance -Name root\cimv2\power -Class win32_PowerPlan `

    -Filter «ElementName = ‘Power Saver'»

    Invoke-CimMethod -InputObject $p -MethodName Activate }

Elseif ((Get-CimInstance win32_battery).batterystatus -eq 3)

  {

   $p = Get-CimInstance -Name root\cimv2\power -Class win32_PowerPlan `

    -Filter «ElementName = ‘High performance'»

    Invoke-CimMethod -InputObject $p -MethodName Activate }

Else

 {

   $p = Get-CimInstance -Name root\cimv2\power -Class win32_PowerPlan `

    -Filter «ElementName = ‘Balanced'»

    Invoke-CimMethod -InputObject $p -MethodName Activate }

Чего я пока не знаю, так это как часто скрипт будет выбирать «High Performance». Это потому, что при использовании технологии «Windows Battery Conditioning» батарея не всегда находится в состоянии полного заряда. Иногда, к примеру на моем ноутбуке, батарея перестает заряжаться при уровне заряда 98% или около того – и я не знаю, соответствует ли это состояние значению 3 – Fully Charged. Вследствие этого, после небольшого тестирования, я пришел к выводу, что могу сменить конструкцию If/ElseIf/Else на If/Else, и устанавливать режим «High Performance» в условии Else.

Если мне нужно будет проверить, установился ли необходимый план энергопотребления в результате работы скрипта, я могу выполнить простой запрос:

Get-CimInstance -Name root\cimv2\power -Class win32_PowerPlan  -Filter «isactive = true» |

  Select-Object elementname

На сегодня все.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/28/use-powershell-to-detect-power-state-and-set-power-plan.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Декабрь 6, 2012 в 14:18

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s