Изменение планов электропитания с помощью PowerShell - PullRequest
0 голосов
/ 18 октября 2018

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

$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()
}

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

Exception calling "Activate" : "This method is not implemented in any class "
At line:6 char:1
+ $PP2.Activate()
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WMIMethodException

Exception calling "Activate" : "This method is not implemented in any class "
At line:10 char: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
                   }"
Caption          : 
Description      : Automatically balances performance with energy consumption on capable hardware.
ElementName      : Balanced
InstanceID       : Microsoft:PowerPlan\{381b4222-f694-41f0-9685-ff5bb260df2e}
IsActive         : True
PSComputerName   : PCLP2

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

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Я обнаружил, что этот метод не работает в 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, но просто любопытно.любой способ заставить эту работу?

0 голосов
/ 18 октября 2018

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

$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
}

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...