sergey vasin

The IT blog

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

leave a comment »

Резюме: Используем пару простых команд Windows PowerShell для получения активного плана энергопотребления на серверах сети и заменяем его на требуемый.

Заметка: Это третья статья, рассказывающая об использовании Windows PowerShell и WMI для определения и задания плана энергопотребления. Сначала вам стоит прочитать статью Используем PowerShell и WMI или CIM для просмотра и настройки планов электропитания. Затем вам стоит познакомиться со статьей Используем PowerShell для определения режима питания и установки плана электропитания для того, чтобы узнать как изменять активные планы энергопотребления при помощи WMI. Сегодняшняя статья подразумевает, что вы знакомы с материалом двух предыдущих статей.

Определяем план энергопотребления на всех компьютерах с WindowsServer 2012

Для определения плана энергопотребления на всех моих компьютерах с операционной системой Windows Server 2012, мне сначала нужно получить список этих компьютеров. Я могу это сделать при помощи командлета Get-ADComputer, входящего в модуль ActiveDirectory. Первое, что я сделаю, это импортирую модуль ActiveDirectory, а затем введу учетные данные, которыми я воспользуюсь позже.

Import-Module ActiveDirectory

$cred = Get-Credential Iammred\administrator

Поскольку я не буду использовать атрибут OperatingSystem в скрипте, мне не нужно его указывать в параметре -Properties. Я воспользуюсь этим атрибутом только в фильтре.

$cn = Get-ADComputer -Filter «OperatingSystem -like ‘* 2012 *'»

Я использую атрибут Name всех объектов компьютеров, входящих в переменную $cn. Также я укажу учетные данные, полученные ранее посредством командлета Get-Credential. Я передам эти значения командлету New-CimSession и сохраню возвращенные сессии в переменной $cim.

$cim = New-CimSession -ComputerName $cn.name -Credential $cred

Теперь я воспользуюсь командлетом Get-CimInstance для получения активных планов энергопотребления со всех моих серверов. Я передам результаты командлету Format-Table, чтобы они выглядели более наглядно.

Get-CimInstance -Name root\cimv2\power -Class win32_PowerPlan `

    -Filter «IsActive = ‘True'»   -CimSession $cim |

    Format-Table PsComputerName, ElementName

Скрипт и его вывод приведены на рисунке.

 01

Полный текст скрипта приведен ниже.

GetServerPowerSaverPlan.ps1

 Import-Module ActiveDirectory

$cred = Get-Credential Iammred\administrator

$cn = Get-ADComputer -Filter «OperatingSystem -like ‘* 2012 *'»

$cim = New-CimSession -ComputerName $cn.name -Credential $cred

Get-CimInstance -Name root\cimv2\power -Class win32_PowerPlan `

    -Filter «IsActive = ‘True'»   -CimSession $cim |

    Format-Table PsComputerName, ElementName

Устанавливаем план энергопотребления для всех компьютеров с WindowsServer 2012

Теперь я понимаю, почему после апгрейда мои серверы стали работать медленнее – активный план энергопотребления на всех серверах установлен в «Balanced». Пожалуй я заменю его на «High Performance». Это делается таким же образом, как я при установке плана на моем ноутбуке в прошлых статьях – мне только нужно установить CIM-сессии ко всем удаленным серверам. Значение параметра -InputObject должно представлять из себя единичный экземпляр плана энергопотребления. Поскольку я работаю с серверами одного типа, я могу немного схитрить и выбрать первый план из коллекции планов энергопотребления. Возможно стоило бы передать результаты от одного командлета другому по конвейеру – но это возможно сказалось бы на производительности. Скрипт приведен ниже.

SetServerPowerSaverPlan.ps1

 Import-Module ActiveDirectory

$cred = Get-Credential Iammred\administrator

$cn = Get-ADComputer -Filter «OperatingSystem -like ‘* 2012 *'»

$cim = New-CimSession -ComputerName $cn.name -Credential $cred

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

    -Filter «ElementName = ‘High performance'»  -CimSession $cim

 Invoke-CimMethod -InputObject $p[0] -MethodName Activate -CimSession $cim

Скрипт возвращает True для каждого успешного изменения.

ReturnValue PSComputerName

———— —————

True HYPERV2

True DC3

True DC2

True DC4

True WEB1

True HYPERV3

True WDS1

True SQL1

Теперь я перезапущу скрипт GetServerPowerSaverPlan, чтобы убедиться, что изменения действительно произошли. Как видно на следующем рисунке – это действительно так.

 02

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/29/use-powershell-to-set-the-power-plan-on-networked-servers.aspx


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

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


Реклама

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

Декабрь 7, 2012 в 10:27

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with , ,

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s