Window 환경에서 ExecutionPolicy 설정하기 (스크립트 실행시 권한문제 해결)

mh·2021년 12월 28일
0

Hello Bug!

목록 보기
1/2
post-thumbnail

Photo by Kyle Hanson on Unsplash

참고문서 | Set-ExecutionPolicy (Microsoft.PowerShell.Security) - PowerShell | Microsoft Docs

🔎 ExecutionPolicy 확인하기

express --ejs first-project 로 프로젝트를 생성하던 중에 이런 오류가 발생했다.

Window의 실행정책(ExecutionPolicy)이 스크립트 실행을 차단해서 생긴 오류였다.
터미널에 ExecutionPolicy를 쳐보면 Restricted라고 나온다.

Restricted는 어떤 스크립트도 실행시키지 않는 설정이다.

set-ExecutionPolicy 명령어로 실행정책을 변경할 수 있다.

예시) set-ExecutionPolicy RemoteSigned

혹은 Get-ExecutionPolicy -List 로 각 범위마다 적용된 실행정책을 볼 수도 있다.
현재 세션에 적용된 실행정책을 보려면 Get-ExecutionPolicy 만 치면 된다.

🧂 ExecutionPolicy 종류

  • AllSigned
    로컬에서 작성된 스크립트도 포함하여 모든 스크립트와 구성파일은 신뢰할만한 게시자로부터 서명이 있어야 실행된다.
  • Bypass
    아무것도 제한하지 않는다. 경고나 프롬프트도 띄우지 않는다.
  • Default
    기본 실행정책이다. 그룹정책이 없거나 실행범위가 정해져 있지 않다면, 모든 사용자는 Restricted 로 설정된다.
  • RemoteSigned
    인터넷에서 다운받은 모든 스크립트와 구성파일이 신뢰할 만한 게시자로부터 서명을 받아야한다. 윈도우 서버 컴퓨터 기본정책이다.
  • Restricted
    구성파일을 로드하지 않고 스크립트를 실행하지 않는다. 윈도우 클라이언트 컴퓨터 기본정책이다.
  • Undefined
    스코프 실행 정책이 정해지지 않는다. 그룹정책에 의해 정해지지 않은 서명된 스코프 실행정책을 제거한다. 모든 스코프의 실행정책이 Undefined라면 유효한 정책은 Restricted가 된다.
  • Unrestricted
    PewerShell 6.0 부터, 이 정책이 윈도우가 아닌 컴퓨터에서의 기본정책이고, 변경 불가이다. 모든 구성파일과 모든 스크립트를 실행한다. 만약 인터넷에서 다운로드한 서명되지 않는 스크립트를 실행할 경우 실행전 허가를 받기 위한 프롬프트를 띄운다.

☢️ 스코프(범위) 설정하기

실행정책이 영향을 미치는 범위를 설정할 수 있다.
기본설정은 LocalMachine이다.

  • MachinePolicy
    모든 사용자정책을 그룹정책에서 설정한다.
  • UserPolicy
    현재 사용자정책을 그룹정책에서 설정한다.
  • Process
    현재 파워셸 세션에서만 유효하게 설정한다.
  • CurrentUser
    현재 사용자에게만 유효하게 설정한다.
  • LocalMachine
    기본 스코프로 모든 유저에게 영향을 끼친다.

Process 스코프는 현재 파워셸 세션에서만 유효하다. 실행정책이 레지스트리 대신 환경변수$env:PSExecutionPolicyPreference 에 저장되는데 뭔말인지 모르겠지만 그냥 현재창이 꺼지면 설정이 원래대로 돌아간다. 현재 세션이 닫히면, 변수와 값은 삭제된다.

CurrentUser 스코프는 레지스트리 HKEY_LOCAL_USER.
LocalMachine 스코프는 레지스트리 HKEY_LOCAL_MACHINE.에 쓰여진다.

🍆 set-ExecutionPolicy 로 정책변경하기

set-ExecutionPolicy 실행정책 -scope 스코프 로 설정하면된다.

  1. 😘 겁쟁이들의 쉼터 (이 세션에서만 실행하기...난 쫄보라 이렇게 설정했다)
    set-ExecutionPolicy RemoteSigned -scope Process
    ->인터넷에서 다운받은 신뢰할만한 인증된 스크립트를 이 세션에서만 실행시킨다

  2. 매번 설정하기 귀찮을 때
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned혹은AllSigned -Scope LocalMachine

  3. 💀 사나이클럽
    set-ExecutionPolicy Bypass

1번 방법으로 설정해보자

실행정책이 RemoteSigned로 제대로 설정되었고 express 명령어를 실행시키면 정상적으로 작동한다.

🎯 정책변경 없이 스크립트파일 실행허가 하기

예를 들어 현재 실행정책이 AllSigned인 상태에서
현재폴더의 허가되지 않은 express.ps1 스크립트를 실행시키고 싶을때

Unblock-File -Path .\express.ps1 를 입력하고
get-ExecutionPolicy를 입력해보면 그대로 AllSigned가 출력되며
실행정책이 변경되지 않았음을 알 수 있지만,

이 상태에서 다시 .\express.ps1 을 입력하면 스크립트가 실행되게 된다.
Unblock-File -Path 명령어가 해당 스크립트를 차단해제했기 때문이다.


profile
🤪🤪🤪🤪🤪

0개의 댓글