복붙노트

[PYTHON] 파이썬에서 PowerShell 스크립트 호출하기

PYTHON

파이썬에서 PowerShell 스크립트 호출하기

파이썬에서 PowerShell 스크립트를 시작하려고합니다.

psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
                             './buildxml.ps1',
                             arg1, arg2, arg3], cwd=os.getcwd())
result = psxmlgen.wait()

문제는 다음과 같은 오류가 발생합니다 :

이전에 관리자가 실행 한 PS 터미널에서 Set-ExecutionPolicy Unrestriced를 입력하여 이전에 Powershell에서 스크립트를 실행할 수있게 만들었다는 사실을 알리지 않았습니다. PowerShell 실행 파일은 시작 메뉴의 바로 가기가 가리키는 것과 동일합니다. Get-ExecutionPolicy는 PowerShell을 admin으로 실행했는지 여부에 관계없이 Unrestricted를 올바르게보고합니다.

파이썬에서 PS 스크립트를 올바르게 실행하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.첫째, Set-ExecutionPolicy Unrestricted는 사용자 단위 및 비트 당 기준 (32 비트는 64 비트와 다릅니다)입니다.

    첫째, Set-ExecutionPolicy Unrestricted는 사용자 단위 및 비트 당 기준 (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()
    

    필자는이 경로로 32 비트 PowerShell에서 64 비트 PowerShell에 액세스 할 수 있습니다 (주석의 @eryksun 덕분).

    powershell64 = os.path.join(os.environ['SystemRoot'], 
        'SysNative' if platform.architecture()[0] == '32bit' else 'System32',
        'WindowsPowerShell', 'v1.0', 'powershell.exe')
    
  2. ==============================

    2.arg1, arg2 및 arg3 값을 powershell에 전달한 후 값을 표시하는 방법을 알고 자했던 사람들은 다음을 수행해야합니다.

    arg1, arg2 및 arg3 값을 powershell에 전달한 후 값을 표시하는 방법을 알고 자했던 사람들은 다음을 수행해야합니다.

    Write-Host $args[0]
    Write-Host $args[1]
    Write-Host $args[2]
    
  3. from https://stackoverflow.com/questions/6901856/invoking-a-powershell-script-from-python by cc-by-sa and MIT license