Вызов PowerShell script из Python
Я пытаюсь запустить PowerShell script из python следующим образом:
psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
'./buildxml.ps1',
arg1, arg2, arg3], cwd=os.getcwd())
result = psxmlgen.wait()
Проблема в том, что я получаю следующую ошибку:
Файл C:\Users\sztomi\рабочей\MyProject\buildxml.ps1 не может быть загружена, так как выполнение сценариев отключено на этом система. Подробнее см. "Get-help about_signing".
НЕЗАВИСИМЫЙ факт, что я давно включил запуск сценариев в Powershell, набрав Set-ExecutionPolicy Unrestriced
в управляемом администратором PS терминале (и снова сделал это, чтобы убедиться). Исполняемый файл powershell аналогичен ярлыку в меню "Пуск". Get-ExecutionPolicy
правильно сообщает Unrestricted
независимо от того, запускал ли я PowerShell как admin или нет.
Как я могу правильно выполнить PS script с Python?
Ответы
Ответ 1
Во-первых, Set-ExecutionPolicy Unrestriced
используется для каждого пользователя, а базис на битность (32-бит отличается от 64-разрядного).
Во-вторых, вы можете переопределить политику выполнения из командной строки.
psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
'-ExecutionPolicy',
'Unrestricted',
'./buildxml.ps1',
arg1, arg2, arg3], cwd=os.getcwd())
result = psxmlgen.wait()
Очевидно, вы можете получить доступ к 64-битной PowerShell из 32-разрядной PowerShell с помощью этого пути (спасибо @eryksun в комментариях):
powershell64 = os.path.join(os.environ['SystemRoot'],
'SysNative' if platform.architecture()[0] == '32bit' else 'System32',
'WindowsPowerShell', 'v1.0', 'powershell.exe')
Ответ 2
Для тех из нас, кто хотел узнать, как отображать значения arg1, arg2 и arg3 после того, как он был передан в powershell, вам нужно всего лишь:
Write-Host $args[0]
Write-Host $args[1]
Write-Host $args[2]