윈도우 파워셀 스크립트 파일 실행을 위한 권한 확인 및 변경 방법

기본 차단된 윈도우 파워셀(PowerShell) 스크립트 파일 사용을 위해, 실행 권한을 확인하는 Get-ExecutionPolicy와, 실행 권한을 변경하는 Set-ExecutionPolicy Cmdlet으로 사용 권한을 변경하는 방법에 대해 설명한다.

나름대로 열심히 삽질해 가면서 파워셀 스크립트를 만들었거나, 어디에서인가 굉장한 스크립트 파일을 구했다 치자. 이제 더 이상의 반복작업과 노가다는 없다! 라 외치며, 작성한 스크립트를 실행하려고 하면 실행 되지 않고 이런 에러를 내 뱉을 때가 있다.

 & : 이 시스템에서 스크립트를 실행할 수 없으므로 x:\xxxxxxx\xx xxxx.ps1 파일을 로드할 수 없습니다.
    자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.
    위치 줄:1 문자:3
    + & '.\xx xxxx.ps1'
    +    ~~~~~~~~~~~~~~
        + CategoryInfo          : 보안 오류: (:) [], PSSecurityException
        + FullyQualifiedErrorId : UnauthorizedAccess
    

한마디로, ‘니가 뭔데 이걸 돌려? 택도 없는 소리 하지 마!’ 되겠다. 이 버르장머리 없는 컴퓨터놈이 주인 얼굴도 못 알아보고 일 못한다고 뻐팅기고 있는 거다. 어떻게 해야 이놈의 버르장머리를 고쳐 놓을 수 있을까?

Get-ExecutionPolicy 파워셀 스크립트의 실행권한 확인

파워셀은 윈도우 시스템에 대한 직접적인 설정 변경이 가능한 도구이다. 허가받지 않은 사용자가 다른 마음을 품고 스크립트를 실행하거나, 뭐가 들어있는지 잘 모르는 스크립트 파일을 별 생각 없이 실행 했다가는, 무슨 엄한 일이 생길 지 모른다. 때문에 파워셀은 기본적으로 스크립트의 실행 권한을 제한 해 두며, 스크립트를 실행하기 위해서는 별도의 권한을 부여해 주어야 한다. 먼저, 현재의 권한이 어떻게 설정 되어 있는가 Get-ExecutionPolicy 명령을 이용해 확인해 본다.

PS C:\TMPDIR>Get-ExecutionPolicy -List

          Scope ExecutionPolicy
          ----- ---------------
    MachinePolicy     Undefined
       UserPolicy     Undefined
          Process     Undefined
      CurrentUser     Undefined
     LocalMachine     Undefined
    
PS C:\TMPDIR>

실행 범위(Scope)에 대해 현재 설정된 실행 정책(ExecutionPolicy) 의 현황을 볼 수 있다. 이 중, Scope 항목이 의미하는 것은 다음과 같다.

ExecutionPolicy Scope
Scope범위설정값 저장 위치
MachinePolicy컴퓨터의 모든 사용자HKLM:\Software\Policies\Microsoft\Windows\Powershell
UserPolicy현재 사용자HKCU:\Software\Policies\Microsoft\Windows\Powershell
Process현재 열려있는 파워셀 세션
LocalMachine컴퓨터의 모든 사용자HKLM​:\Software\Microsoft\Powershell\1\ShellIds
CurrentUser현재 사용자HKCU:\Software\Microsoft\Powershell\1\ShellIds

그리고 각각의 범위별로 현재 적용되고 있는 ExecutionPolicy 정책이 표시되고 있는데, 각 정책은 다음과 같이 동작하게 된다.

AllSigned
서명이 있는 스크립트만 실행할 수 있음.
Bypass
차단되지 않음.
Default
기본 구성된 정책 (서버OS는 RemoteSigned, 일반OS는 Restricted)
RemoteSigned
로컬 컴퓨터에서 에서 작성된 스크립트는 실행 가능, 외부에서 가져온 스크립트는 서명된 것만 가능
Restricted
허용하지 않음.
Undefined
정의되지 않음. (이 경우 Default를 따름)
Unrestricted
모든 스크립트(서명되지 않은 스크립트 포함)를 실행 가능

즉, 위의 예에서 모든 범위에 대해 Undefined 상태인 것은, 모든 범위에 대해서 권한이 정의되지 않았다는 의미다. 권한 정의가 되어있지 않다는 것은, 사용자가 직접 작성했거나 외부에서 가지고 온 서명 없는 스크립트는 실행할 수 있는 권한이 없다는 의미이다.

Set-ExecutionPolicy : 파워셀 스크립트의 실행권한 설정

실행 권한이 없는 것을 확인 했으니, 이제는 권한을 부여해 주어야 한다. 실행 권한을 설정하는 Cmdlet은 Set-ExecutionPolicy 이다. 아래와 같이 입력해 보자.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

현재 사용자 (CurrentUser)에 대해서 제한 없이 스크립트 실행을 허용(Unrestricted) 하도록 하겠다는 명령이다. 상황에 따라 위의 권한과 정책을 변경해 사용해 주면 되겠다. 실행하면 아래와 같이 실제로 적용 하겠는가 물어보는 메세지가 뜬다. y를 입력해 주면 해당 정책이 적용 된다.

실행 규칙 변경
    실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다.
    실행 정책을 변경하면 about_Execution_Policies 도움말 항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된 보안 위험에 노출될 수 있습니다.
    실행 정책을 변경하시겠습니까?
    [Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "N"): y
    PS C:\TMPDIR>
    

이렇게 하면, 현재 로그인 되어 있는 사용자에게 모든 종류의 스크립트를 실행할 수 있는 권한이 부여 되게 된다. 이제 컴퓨터의 버르장머리를 고쳐 놨으니, 스크립트를 마음껏 사용해 열심히 일하도록 시켜보자.

끝으로

파워셀 스크립트는 윈도우 시스템의 모든 설정과 정책을 조정할 수 있는 막강한 기능을 가지고 있다. 때문에 파워셀 스크립트의 허용 권한을 아무렇게나 풀어놓았다간 뭔 일을 어떻게 당할 지 모른다. 보안의 기본은 필요한 것 만 허용이다. 귀찮더라도 바른 정책을 수립해서 사용하고, 꼭 필요할 경우 사용을 한 후 다시 권한을 막아 두는게 정신건강에 여러모로 도움이 된다.

관련한 추가적인 정보는 MS의 PowerShell 실행 정책 관련 문서를 참고하기 바란다.

1998년 라이브 음향 엔지니어로 시작해 2005년부터 방송 송출 및 미디어 전송 엔지니어의 삶을 살아가고 있습니다. 아날로그 제작 시스템부터 최신 IP 미디어 라스트마일 환경까지, 미디어 기술과 정보 통신 기술(ICT)의 융합을 통해 새로운 솔루션을 제안하고 실현시켜 왔습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Post comment