Изменение планов электропитания с помощью 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
}
удачи