PowerShell 실행 정책 오류 해결 방법, npm 전역 명령어 실행 안 될 때 대처법

Windows에서 npm으로 설치한 CLI 도구가 “이 시스템에서 스크립트를 실행할 수 없으므로” 오류로 막힐 때, 원인은 npm이 아니라 PowerShell의 실행 정책(Execution Policy)입니다. 관리자 권한으로 정책을 한 번만 조정하면 대부분 해결됩니다.

새 CLI 툴을 설치하고 바로 써보려는데 PSSecurityException이 뜨면 당황스럽습니다. 분명 npm install까지는 문제없이 끝났는데 정작 실행이 안 되는 경우죠. 실무에서 보면 이 문제는 Windows 환경에서 npm 전역 패키지를 처음 쓰는 분들이 거의 예외 없이 한 번씩 겪습니다.

왜 이런 오류가 발생하는가

npm은 Windows에서 전역 CLI 도구를 설치할 때 세 가지 실행 파일을 함께 만듭니다. .cmd 파일, .ps1 파일, 그리고 확장자 없는 셸 스크립트입니다. PowerShell에서 명령어를 입력하면 우선적으로 .ps1 파일을 찾아 실행하려 하는데, 이 .ps1 스크립트 실행 자체를 Windows 보안 정책이 기본적으로 차단하고 있습니다.

기본값인 Restricted 정책에서는 로컬에서 만든 스크립트든, npm이 자동 생성한 스크립트든 상관없이 전부 막힙니다. 이건 도구가 잘못 설치된 게 아니라 Windows 자체의 보안 기본값 때문입니다.

현재 실행 정책 확인하기

정책을 바꾸기 전에 지금 어떤 상태인지부터 확인하는 게 순서입니다. PowerShell을 열고 아래 명령어를 입력하세요.

Get-ExecutionPolicy -List

현재 실행 정책 확인하기
현재 실행 정책 확인하기

스코프별로 CurrentUser, LocalMachine, Process 등의 값이 나열됩니다. 대부분의 가정용 PC에서는 별도 설정을 건드리지 않았다면 Restricted 상태로 표시됩니다. 이 값이 원인이라는 걸 눈으로 확인하고 넘어가는 게 좋습니다.

실행 정책 변경으로 해결하기

가장 일반적이고 안전한 해결 방법은 현재 사용자 계정 범위에서만 RemoteSigned 정책을 적용하는 것입니다. 관리자 권한 PowerShell을 열고 다음 명령어를 실행합니다.

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

중간에 확인 메시지가 뜨면 Y를 입력하고 엔터를 누르면 됩니다. 이 명령은 로컬에서 만들어진 스크립트는 서명 없이 실행을 허용하고, 인터넷에서 다운로드된 스크립트는 서명이 있어야만 실행하도록 합니다. npm이 로컬에 생성한 .ps1 파일은 이 조건에 걸리지 않아 정상적으로 실행됩니다.

이 부분이 핵심입니다. LocalMachine 스코프 대신 CurrentUser 스코프로 지정하면 관리자 권한 없이도 적용 가능한 경우가 많고, 시스템 전체가 아니라 내 계정에만 영향을 주기 때문에 보안 측면에서도 더 안전합니다.

정책을 바꾸지 않고 우회하는 방법

회사 PC처럼 그룹 정책으로 실행 정책 변경이 막혀 있는 환경도 있습니다. 이런 경우 몇 가지 우회 방법이 있습니다.

  • PowerShell 대신 명령 프롬프트(cmd.exe)에서 같은 명령어를 실행 — .cmd 파일이 우선 실행되어 정책의 영향을 받지 않습니다.
  • 단발성으로만 허용하려면 powershell -ExecutionPolicy Bypass -File 경로 형태로 스크립트를 직접 지정해 실행합니다.
  • 세션 단위로만 완화하려면 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass를 입력한 뒤 같은 창에서 명령어를 실행합니다. 창을 닫으면 원래 정책으로 돌아갑니다.

이건 직접 겪어보면 체감되는데, 회사 보안팀에서 관리하는 노트북에서는 관리자 권한 명령이 아예 막혀 있는 경우가 흔합니다. 그럴 땐 Process 스코프 우회가 사실상 유일한 선택지가 됩니다.

Windows PowerShell 창에서 Set-ExecutionPolicy 명령어를 입력하는 화면, 실행 정책 변경 과정
Windows PowerShell 창에서 Set-ExecutionPolicy 명령어를 입력하는 화면, 실행 정책 변경 과정

방법별 비교와 선택 기준

초보자는 보통 검색해서 나오는 Bypass나 Unrestricted를 무작정 따라 하는 경우가 많습니다. 하지만 실무자는 스코프와 정책 수준을 상황에 맞게 구분해서 씁니다. 아래 표를 기준으로 본인 환경에 맞는 방법을 고르면 됩니다.

방법적용 범위보안 수준추천 상황
RemoteSigned + CurrentUser내 계정만높음개인 PC, 일반적인 npm CLI 사용
Bypass + Process현재 창만중간일회성 실행, 정책 변경 자체가 막힌 환경
cmd.exe로 실행해당 명령만높음PowerShell 정책을 아예 건드리고 싶지 않을 때
Unrestricted + LocalMachinePC 전체, 모든 사용자낮음권장하지 않음

많이들 여기서 막히더라고요. Unrestricted를 시스템 전체에 걸어버리면 당장은 편하지만, 이후 악성 스크립트도 별다른 경고 없이 실행될 수 있는 환경이 됩니다. 개인 개발 PC라 해도 CurrentUser 스코프의 RemoteSigned 정도로 제한하는 습관을 들이는 걸 권합니다.

자주 오해하는 부분 바로잡기

실행 정책을 npm이나 Node.js 문제로 오해하는 경우가 많습니다. 하지만 이건 npm 패키지의 결함이 아니라 Windows PowerShell의 스크립트 보안 기능이 정상적으로 작동한 결과입니다. 즉 npm을 재설치하거나 Node.js 버전을 바꿔도 해결되지 않습니다.

또 하나 흔한 오해는 “정책을 한 번 바꾸면 다시 원래대로 못 돌린다”는 것입니다. 언제든 아래 명령어로 원래 상태로 되돌릴 수 있습니다.

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Restricted

정리하자면 다음 체크리스트로 순서대로 진행하면 됩니다.

  • Get-ExecutionPolicy -List로 현재 상태 확인
  • 관리자 권한 PowerShell에서 Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned 실행
  • 확인 메시지에 Y 입력
  • 같은 창을 새로 열어 명령어 재실행
  • 정책 변경이 막힌 환경이라면 cmd.exe나 Process 스코프 우회 사용

회사 PC라서 관리자 권한 명령이 아예 막혀 있나요? 아니면 개인 PC인데도 정책 변경이 적용되지 않는 상황인가요? 이 두 경우는 접근 방법이 달라지기 때문에 댓글로 상황을 남겨주시면 구체적으로 짚어드리겠습니다.

지금 바로 관리자 권한 PowerShell을 열고 Get-ExecutionPolicy -List부터 실행해서 현재 상태를 확인해 보세요.

이 글이 도움이 되셨다면, 어떤 CLI 도구를 설치하다가 이 오류를 만나셨는지 댓글로 알려주세요. 그리고 RemoteSigned와 Bypass 중 어떤 방법을 선택하셨는지도 궁금합니다.


다음 글 추천

  • npm 전역 패키지 설치 및 관리 가이드, PATH 설정까지 정리
  • Windows Terminal과 PowerShell 7 설치 및 기본 설정 방법

본 포스팅은 정보 전달 목적이며, 실제 적용 시 발생하는 책임은 사용자에게 있습니다.

댓글 남기기