Photo by Kyle Hanson on Unsplash
참고문서 | Set-ExecutionPolicy (Microsoft.PowerShell.Security) - PowerShell | Microsoft Docs
express --ejs first-project
로 프로젝트를 생성하던 중에 이런 오류가 발생했다.
Window의 실행정책(ExecutionPolicy)이 스크립트 실행을 차단해서 생긴 오류였다.
터미널에 ExecutionPolicy
를 쳐보면 Restricted
라고 나온다.
Restricted
는 어떤 스크립트도 실행시키지 않는 설정이다.
set-ExecutionPolicy
명령어로 실행정책을 변경할 수 있다.
예시) set-ExecutionPolicy RemoteSigned
혹은
Get-ExecutionPolicy -List
로 각 범위마다 적용된 실행정책을 볼 수도 있다.
현재 세션에 적용된 실행정책을 보려면Get-ExecutionPolicy
만 치면 된다.
AllSigned
Bypass
Default
RemoteSigned
Restricted
Undefined
Unrestricted
실행정책이 영향을 미치는 범위를 설정할 수 있다.
기본설정은 LocalMachine이다.
MachinePolicy
UserPolicy
Process
CurrentUser
LocalMachine
Process
스코프는 현재 파워셸 세션에서만 유효하다. 실행정책이 레지스트리 대신 환경변수$env:PSExecutionPolicyPreference 에 저장되는데 뭔말인지 모르겠지만 그냥 현재창이 꺼지면 설정이 원래대로 돌아간다. 현재 세션이 닫히면, 변수와 값은 삭제된다.
CurrentUser
스코프는 레지스트리 HKEY_LOCAL_USER.
에
LocalMachine
스코프는 레지스트리 HKEY_LOCAL_MACHINE.
에 쓰여진다.
set-ExecutionPolicy 실행정책 -scope 스코프
로 설정하면된다.
😘 겁쟁이들의 쉼터 (이 세션에서만 실행하기...난 쫄보라 이렇게 설정했다)
set-ExecutionPolicy RemoteSigned -scope Process
->인터넷에서 다운받은 신뢰할만한 인증된 스크립트를 이 세션에서만 실행시킨다
매번 설정하기 귀찮을 때
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned혹은AllSigned -Scope LocalMachine
💀 사나이클럽
set-ExecutionPolicy Bypass
1번 방법으로 설정해보자
실행정책이 RemoteSigned로 제대로 설정되었고 express 명령어를 실행시키면 정상적으로 작동한다.
예를 들어 현재 실행정책이 AllSigned
인 상태에서
현재폴더의 허가되지 않은 express.ps1
스크립트를 실행시키고 싶을때
Unblock-File -Path .\express.ps1
를 입력하고
get-ExecutionPolicy
를 입력해보면 그대로 AllSigned
가 출력되며
실행정책이 변경되지 않았음을 알 수 있지만,
이 상태에서 다시 .\express.ps1
을 입력하면 스크립트가 실행되게 된다.
Unblock-File -Path
명령어가 해당 스크립트를 차단해제했기 때문이다.