Я полагаю, это потому, что в Windows используемой по умолчанию командной оболочкой не является PowerShell, вы можете выполнить команду Powershell, вызвав исполняемый файл, выполнив Powershell с необходимыми аргументами.
Например
POWERSHELL_COMMAND = r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe'
subprocess.Popen([POWERSHELL_COMMAND,
'-ExecutionPolicy', 'Unrestricted',
'Write-Output', 'Hello World'],
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
если powershell не находится в пути, вы можете использовать полный путь для исполняемого файла
или, если он находится в пути, вы можете использовать просто POWERSHELL_COMMAND = "powershell"
в качестве команды, будьте осторожны, с путями окон с обратной косой чертой, чтобы избежать ошибок, вы можете использовать необработанные строки.
Чтобы убедиться, что у вас есть PowerShell в пути, вы можете перейти к настройкам и проверить, или вы можете просто открыть cmd
и набрать powershell
, и если это сработает, вы можете предположить, что PowerShell находится в пути.
Из документов :
В Windows с shell = True переменная среды COMSPEC задает оболочку по умолчанию.
То есть set COMSPEC=powershell
позволяет shell=True
использовать powershell
по умолчанию вместо cmd