PowerShell에서 npm이나 npx를 입력했는데 "이 시스템에서 스크립트를 실행할 수 없으므로 npm.ps1 파일을 로드할 수 없습니다"가 나오면 실행 정책을 CurrentUser 범위에서 RemoteSigned로 바꾸면 됩니다. Node.js는 npm과 npx를 .ps1 스크립트로도 설치하는데, 정책이 Restricted이면 이 파일이 막힙니다. 아무 범위에도 정책을 정하지 않은 Windows 클라이언트는 Restricted가 적용됩니다. CurrentUser 범위는 관리자 권한 없이 바꿀 수 있고 재부팅도 필요 없습니다. 그룹 정책이 걸린 회사 PC라면 npm.cmd를 쓰거나 cmd 창에서 실행하세요. 근거는 10월 28일에 연 마이크로소프트 about_Execution_Policies 문서입니다.
npm.ps1 오류 요약
해결 명령
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
그룹 정책 PC
npm.cmd 또는 cmd 창 사용
PowerShell은 같은 이름의 명령이 여러 형식으로 있으면 .ps1 스크립트를 먼저 실행합니다. Node.js 설치 폴더에는 npm.cmd와 npm.ps1이 같이 들어 있어서, PowerShell에서 npm을 입력하면 npm.ps1이 불리고 실행 정책에 걸립니다. cmd 창에서는 같은 명령이 문제없이 동작하는 이유가 여기에 있습니다.
Restricted 정책은 개별 명령은 허용하지만 스크립트 파일은 모두 막습니다. 마이크로소프트 문서는 모든 범위가 Undefined이면 Windows 클라이언트의 실제 적용 정책이 Restricted라고 적고 있습니다.
CurrentUser 범위 설정은 현재 사용자에게만 적용되고 설정 파일에 저장되어, 바꾼 뒤 열린 새 PowerShell 창부터 계속 유지됩니다. LocalMachine 범위는 컴퓨터의 모든 사용자에게 적용되며 관리자 권한이 필요합니다.
RemoteSigned는 내 PC에서 만든 스크립트는 실행하고, 인터넷에서 받은 스크립트는 서명이 있어야 실행합니다. npm.ps1은 Node.js 설치 과정에서 로컬에 놓인 파일이라 이 정책에서 실행됩니다.
바로 답 | 그룹 정책(MachinePolicy, UserPolicy)이 가장 우선이고, 그다음 Process, CurrentUser, LocalMachine 순입니다.
한 번만 실행하고 설정은 남기고 싶지 않다면 Process 범위를 쓰면 됩니다. 이 값은 환경 변수 $Env:PSExecutionPolicyPreference에 저장되고 창을 닫으면 사라집니다.