Изменение планов электропитания с помощью PowerShell

Я пытаюсь создать сценарий, который переключается между планами питания. Вот сценарий:

$PP1 = Get-WmiObject -Namespace root\cimv2\power -Class Win32_PowerPlan |
           where {$_.elementname -eq "Balanced"}
$PP2 = Get-WmiObject -Namespace root\cimv2\power -Class Win32_PowerPlan |
       where {$_.elementname -eq "My Custom Plan 1"}

if ($PP1) {
    $PP2.Activate()
}
if ($PP2) {
    $PP1.Activate()
}

И вот ошибка, которую я получаю:

Исключение, вызывающее "Activate": "Этот метод не реализован ни в одном классе"
В строке:6 символов:1
+ $PP2.Activate()
+ ~~~~~~~~~~~~~~~
    + CategoryInfo: NotSpecified: (:) [], исключение MethodInvocationException
    + FullyQualifiedErrorId: WMIMethodException

Исключение, вызывающее "Activate": "Этот метод не реализован ни в одном классе"
В строке:10 символов:1
+ $PP1.Activate()
+ ~~~~~~~~~~~~~~~
    + CategoryInfo: NotSpecified: (:) [], исключение MethodInvocationException
    + FullyQualifiedErrorId: WMIMethodException

Есть идеи, как это исправить?

Ниже вывод, который я получаю после выполнения $PP1, Выход идентичен как $PP2:

__GENUS: 2
__CLASS: Win32_PowerPlan
__SUPERCLASS: CIM_SettingData
__DYNASTY: CIM_ManagedElement
__RELPATH: Win32_PowerPlan.InstanceID = "Microsoft: PowerPlan \\ {381b4222-f694-41f0-9685-ff5bb260df2e}"
__PROPERTY_COUNT: 5
__DERIVATION: {CIM_SettingData, CIM_ManagedElement}
__SERVER: PCLP2
__NAMESPACE: root \ cimv2 \ power
__PATH: \\ PCLP2 \ root \ cimv2 \ power: Win32_PowerPlan.InstanceID = "Microsoft: PowerPlan \\ {381b4222-f694-41f0-9685-ff5bb260df2e
                   }"
Подпись: 
Описание: Автоматически балансирует производительность с энергопотреблением на подходящем оборудовании.
ElementName: Сбалансированный
Идентификатор экземпляра: Microsoft:PowerPlan\{381b4222-f694-41f0-9685-ff5bb260df2e}
IsActive: True
PSComputerName: PCLP2

Моя цель - добавить скрипт в планировщик задач, и каждый раз, когда я блокирую компьютер, состояние питания меняется соответственно.

2 ответа

Я обнаружил, что этот метод не работает в Windows 10 по некоторым причинам, которые я точно не знаю, поэтому я просто работал с помощью powercfg команда, вот рабочий скрипт.

$PP1 = Get-WmiObject -Namespace root\cimv2\power -Class win32_powerplan | where {$_.elementname -eq "Balanced"}


if ($PP1.IsActive -eq "False") {
powercfg /setactive 47f02214-4297-464e-8b31-f95e26d28082 
} Else { 

powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
} 

Поскольку у меня есть только 2 схемы питания, это проще и проще, поэтому у меня есть 1 переменная, и это может быть только PowerPlan A или PowerPlan B.

Не уверен, как заставить это работать в планировщике задач, потому что он открывает блокнот для меня, если я запускаю задачу, хотя я мог бы просто сделать это, используя bat-файл с powercfg команда, но просто любопытно. любой способ заставить эту работу?

Я думаю, что вы как-то связаны с этим кодом

$PP1 = Get-WmiObject -Namespace root\cimv2\power -Class Win32_PowerPlan -Filter "ElementName ='Balanced'"
$PP2 = Get-WmiObject -Namespace root\cimv2\power -Class Win32_PowerPlan -Filter "ElementName = 'Power saver'"
if ($PP1.IsActive -eq "true"){
write-host Balanced
$PP2.Activate()
}
else{
Write-Host Power saver
}

удачи

Другие вопросы по тегам