Sign In

Windows PowerShell 실행 정책 오류 해결 가이드

📌 들어가며
Windows에서 npm으로 설치한 CLI 도구(예: claude, vue, ng등)를
PowerShell에서 실행하면 아래와 같은 오류를 마주치는 경우가 있습니다.
claude : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Users\username\AppData\Roaming\npm\claude.ps1 파일을 로드할 수 없습니다. + CategoryInfo : 보안 오류: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
처음 보면 당황스럽지만, 이는 Windows PowerShell의 보안 정책때문이며
간단하게 해결할 수 있습니다.

🔐 왜 이런 오류가 발생하는가?

PowerShell 실행 정책(Execution Policy)이란?

PowerShell은 스크립트 실행에 대한 보안 정책을 가지고 있습니다.
이를
Execution Policy(실행 정책)라고 하며,
악의적인 스크립트로부터 시스템을 보호하기 위해 Microsoft가 설계한 보안 기능입니다.

Windows 기본 정책은 Restricted

Windows를 처음 설치하면 PowerShell의 기본 실행 정책은 Restricted입니다.
이 정책은
모든 스크립트 실행을 차단합니다.
정책 이름
설명
Restricted
모든 스크립트 실행 차단 (Windows 기본값)
AllSigned
신뢰할 수 있는 서명된 스크립트만 실행
RemoteSigned
로컬 스크립트는 허용, 인터넷 다운로드는 서명 필요
Unrestricted
모든 스크립트 허용 (보안상 비권장)
Bypass
정책 완전 무시 (임시 사용 용도)

npm CLI 도구가 .ps1 파일을 생성하는 이유

npm install -g로 CLI 도구를 설치하면,
Windows에서는 자동으로
3가지 실행 파일이 생성됩니다.
claude ← Linux/Mac용 shell script claude.cmd ← Windows CMD용 배치 파일 claude.ps1 ← Windows PowerShell용 스크립트
PowerShell에서 claude를 입력하면
PowerShell은
claude.ps1을 실행하려고 시도합니다.
하지만 기본 정책(
Restricted)이 .ps1 파일 실행을 막기 때문에
UnauthorizedAccess 오류가 발생하는 것입니다.

✅ 해결 방법

방법 1: 실행 정책 변경 (가장 권장)

PowerShell을 관리자 권한으로 실행 후 아래 명령어를 입력합니다.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
확인 메시지가 나오면 Y를 입력합니다.

✔ 왜 RemoteSigned인가?

로컬에서 만든 스크립트는 자유롭게 실행 가능
인터넷에서 다운로드한 스크립트는 신뢰할 수 있는 서명이 있어야 실행 가능
보안과 편의성의 균형이 가장 잘 맞는 정책
Microsoft도 개발 환경에서 공식 권장하는 정책

✔ 왜 -Scope CurrentUser인가?

-Scope 옵션은 정책을 어느 범위에 적용할지 결정합니다.
Scope
설명
MachinePolicy
그룹 정책으로 설정 (관리자 전용)
UserPolicy
그룹 정책으로 설정 (현재 사용자)
Process
현재 PowerShell 세션에만 적용
CurrentUser
현재 로그인한 사용자에게만 적용 ✅
LocalMachine
이 컴퓨터의 모든 사용자에게 적용
CurrentUser로 설정하면:
관리자 권한 없이도 설정 가능
다른 사용자에게 영향 없음
개인 개발 환경에서 가장 안전한 선택

방법 2: 일회성 우회 (임시 방편)

매번 실행할 때마다 아래 명령어를 사용할 수 있습니다.
powershell -ExecutionPolicy Bypass -Command "claude"

⚠ 이 방법의 단점

매번 긴 명령어를 입력해야 함
근본적인 해결책이 아님
자동화 스크립트에서 활용할 때만 권장

방법 3: CMD 사용 (우회 방법)

PowerShell 대신 명령 프롬프트(CMD) 를 사용합니다.
claude
CMD는 claude.ps1 대신 claude.cmd를 실행하기 때문에
실행 정책 오류가 발생하지 않습니다.

⚠ 이 방법의 단점

PowerShell의 강력한 기능을 사용할 수 없음
개발 환경에 따라 CMD로 전환이 불편할 수 있음

🔍 설정 확인 방법

정책 변경 후 아래 명령어로 현재 설정을 확인합니다.
Get-ExecutionPolicy # 출력: RemoteSigned ← 정상
모든 Scope의 정책을 확인하려면:
Get-ExecutionPolicy -List
출력 예시:
Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned ← ✅ 정상 LocalMachine Restricted

🛡 보안 관점에서의 고려사항

실행 정책을 변경하는 것이 보안에 위협이 되지 않는가? 라는 의문이 생길 수 있습니다.

RemoteSigned는 안전한가?

안전합니다. 그 이유는 다음과 같습니다.
1.
인터넷에서 다운로드한 스크립트는 여전히 서명이 필요합니다.
2.
악성 .ps1 파일을 직접 실행하려 해도 서명이 없으면 차단됩니다.
3.
npm으로 설치한 도구는 로컬에 저장된 스크립트이므로 신뢰할 수 있습니다.
4.
Microsoft가 개발자 환경에서 공식 권장하는 설정입니다.

❌ 절대 하지 말아야 할 것

# ❌ 절대 비권장 Set-ExecutionPolicy Unrestricted Set-ExecutionPolicy -Scope LocalMachine Unrestricted
Unrestricted모든 스크립트를 무조건 실행하므로
악성 스크립트에 취약해질 수 있습니다.

📝 정리

구분
내용
오류 원인
PowerShell 기본 실행 정책(Restricted)이 .ps1 스크립트 실행 차단
권장 해결책
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
이유
보안과 편의성의 균형, Microsoft 공식 권장 설정
확인 방법
Get-ExecutionPolicy 명령어로 RemoteSigned 확인

💡 마치며

PowerShell 실행 정책은 Windows의 중요한 보안 기능입니다.
무조건 비활성화하는 것이 아니라, 개발 환경에 맞는 적절한 정책을 선택하는 것이 중요합니다.
RemoteSigned 정책은 개발자에게 충분한 자유를 주면서도
시스템 보안을 유지할 수 있는 최선의 선택입니다.
📌 참고 링크