Как из Python отдать команды в PowerShell по строкам?

Так как я всё еще не рублю фишку в Python и в программировании - всплыла деталь, которую мне приходится изучать. Исходя из моего предыдущего вопроса (https://toster.ru/q/371771), я полез в PowerShell и смог таки убавить яркость экрана посредством 2-х простых команд.
$monitor=Get-WmiObject -Namespace root/WMI -ClassName WmiMonitorBrightnessMethods
$monitor.WmiSetBrightness(0,50)

Но это в PowerShell. А мне нужно через Python сначала вызвать PS, а потом послать вышеуказанные команды. Чё я и делаю.
import subprocess

proc = subprocess.Popen(['powershell', '$monitor=Get-WmiObject -Namespace root/WMI -ClassName WmiMonitorBrightnessMethods', '$monitor.WmiSetBrightness(0,50)'])
proc.wait()

Кодик не работает, отдаёт красные буквы в консоли и что то про инвокера пишет.
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Вопрос как послать эти две элементарные команды в элементарный PowerShell, только по очерёдности строк, а не в одну строку? Ибо в привычной для этих команд оболочке ПШ экран послушно регулирует яркость, а через пайтон соединяет по ходу две команды в одну строку.
  • Вопрос задан
  • 3837 просмотров
Решения вопроса 1
Как Вам уже написали. Между командами PS нужна ";" .
Замените:
'$monitor=Get-WmiObject -Namespace root/WMI -ClassName WmiMonitorBrightnessMethods', '$monitor.WmiSetBrightness(0,50)'

на:
'$monitor=Get-WmiObject -Namespace root/WMI -ClassName WmiMonitorBrightnessMethods; $monitor.WmiSetBrightness(0,50)'


Итоговый код в таком случае:
import subprocess

proc = subprocess.Popen(['powershell', '$monitor=Get-WmiObject -Namespace root/WMI -ClassName WmiMonitorBrightnessMethods; $monitor.WmiSetBrightness(0,50)'])
proc.wait()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы