- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 Windows 환경에서 PowerShell 스크립트 실행 정책으로 인해 발생하는 실행 차단 오류를 안전하게 해제하고, 보안 수준을 유지하면서 실행 정책을 올바르게 설정·복구하는 실무 절차를 정리하는 것이다.
1. PowerShell 실행 정책 개념 이해
PowerShell 실행 정책(Execution Policy)은 스크립트 실행 자체를 완전히 막는 보안 기능이라기보다, 관리자가 스크립트 실행에 대한 기본 가이드를 정하는 “보안 수준 설정”에 가깝다. 실행 정책을 낮추면 스크립트가 더 자유롭게 실행되지만 악성 스크립트에 노출될 위험도 함께 증가한다.
실무에서는 다음과 같은 오류 메시지로 실행 정책 문제를 인지하는 경우가 많다.
이 시스템에서 스크립트 실행이 사용되지 않으므로 <스크립트 경로> 파일을 로드할 수 없습니다. 자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오. 이 오류가 발생하면 대부분 현재 실행 정책이 Restricted이거나, 조직 정책에 의해 스크립트 실행이 제한되어 있는 경우가 많다.
1.1 실행 정책 종류 정리
PowerShell에서 사용되는 대표적인 실행 정책은 다음과 같다.
| 실행 정책 | 설명 | 보안 수준 | 실무 사용 예 |
|---|---|---|---|
| Restricted | 스크립트 실행을 전면 차단한다. 개별 명령(cmdlet)만 실행 가능하다. | 매우 높음 | 일반 사용자 PC 기본값(구버전), 스크립트 사용 거의 없는 환경 |
| AllSigned | 모든 스크립트는 신뢰할 수 있는 서명(코드 서명 인증서)이 있어야 실행된다. | 높음 | 금융·공공기관 등 엄격한 보안 환경 |
| RemoteSigned | 인터넷에서 내려받은 스크립트는 서명이 필요하지만, 로컬에서 직접 작성한 스크립트는 서명 없이 실행된다. | 중간 이상 | 개발자·관리자 PC, 일반적인 권장 설정 |
| Unrestricted | 스크립트 실행을 대부분 허용하며, 인터넷에서 내려받은 스크립트는 실행 전 경고만 표시한다. | 중간 | 테스트 환경, 일시적인 문제 해결용 |
| Bypass | 실행 정책 검사를 사실상 사용하지 않는다. 경고도 표시하지 않는다. | 낮음 | 전용 배포 스크립트, 자동화 도구 내 내장용 |
| Undefined | 해당 범위(scope)에 설정된 실행 정책이 없다. 상위 범위 설정을 따른다. | 범위에 따라 다름 | 기본 상태 복원 시 사용 |
2. 현재 PowerShell 실행 정책 확인 방법
실행 정책을 변경하기 전에 반드시 현재 설정값을 확인해야 한다. PowerShell을 열고 다음 명령을 입력한다.
2.1 단일 실행 정책 확인
Get-ExecutionPolicy 출력 예시는 다음과 같다.
RemoteSigned 이 경우 현재 세션에서 적용되는 유효 실행 정책이 RemoteSigned라는 뜻이다.
2.2 범위별 실행 정책 전체 확인
여러 범위(scope)에 서로 다른 실행 정책이 설정되어 있으면, 실제로 적용되는 값은 우선순위에 따라 달라진다. 각 범위별 설정을 확인하려면 다음 명령을 사용한다.
Get-ExecutionPolicy -List 출력 예시는 다음과 같다.
Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned LocalMachine Restricted 일반적으로 우선순위는 다음과 같은 순서로 적용된다.
- MachinePolicy / UserPolicy (그룹 정책)
- Process
- CurrentUser
- LocalMachine
위 예시에서는 CurrentUser에 RemoteSigned가 설정되어 있으므로, 전체 유효 정책은 RemoteSigned가 된다.
3. 실행 정책 변경(해제) 기본 절차
실행 정책 해제 또는 완화는 Set-ExecutionPolicy cmdlet으로 수행한다. 대부분의 작업은 관리자 권한 PowerShell에서 진행하는 것이 안전하다.
3.1 관리자 권한 PowerShell 실행
- 시작 메뉴에서 “PowerShell” 또는 “Windows PowerShell”을 검색한다.
- 검색 결과에서 “관리자 권한으로 실행”을 선택한다.
- UAC(사용자 계정 컨트롤) 확인 창이 뜨면 “예”를 선택한다.
3.2 LocalMachine 범위 실행 정책 완화
모든 사용자와 모든 세션에 대해 실행 정책을 완화하고 싶다면 LocalMachine 범위를 사용할 수 있다. 예를 들어 RemoteSigned로 변경하려면 다음과 같이 입력한다.
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine 명령 실행 후 “실행 정책 변경” 여부를 묻는 프롬프트가 나오면 Y 를 입력하고 Enter 키를 누른다.
3.3 CurrentUser 범위만 완화 (개인 계정에만 적용)
시스템 전체가 아닌 “현재 로그인한 사용자”에만 실행 정책을 완화하는 것이 더 안전한 경우가 많다. 이때는 CurrentUser 범위를 사용한다.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 이 방법은 다른 사용자 계정이나 시스템 전체 설정에는 영향을 주지 않아, 테스트용 스크립트를 자주 사용하는 개인 PC에 적합하다.
3.4 Process 범위로 일회성 실행 허용
정책을 영구적으로 변경하지 않고, 특정 PowerShell 세션에서만 일시적으로 실행 정책을 완화하고 싶을 때는 Process 범위를 사용한다.
Set-ExecutionPolicy Bypass -Scope Process 이 설정은 현재 PowerShell 창을 닫으면 함께 사라진다. 정책 파일이나 레지스트리에는 기록되지 않는다.
3.5 스크립트 실행 명령과 함께 Bypass 사용
자동화 도구나 배치 파일에서 PowerShell 스크립트를 실행하면서, 해당 호출에만 실행 정책을 무시하게 만들 수도 있다.
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\deploy.ps1" 이 방식은 시스템 전체 실행 정책을 변경하지 않으면서도, 특정 작업에 대해 실행 정책 검사를 우회할 필요가 있을 때 유용하다.
4. 대표적인 문제 상황별 해결 방법
4.1 “이 시스템에서 스크립트 실행이 사용되지 않습니다” 오류
가장 흔하게 접하는 오류이다. 원인은 대부분 실행 정책이 Restricted로 설정된 경우이다.
Get-ExecutionPolicy -List로 현재 설정을 확인한다.- MachinePolicy/UserPolicy에 값이 지정되어 있다면 조직 정책일 가능성이 높다. IT 관리자에게 문의한다.
- 정책이 제한되지 않았다면 CurrentUser 또는 LocalMachine 범위를 RemoteSigned 등으로 변경한다.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 4.2 인터넷에서 받은 스크립트만 실행이 막히는 경우
실행 정책이 RemoteSigned인데 인터넷에서 다운로드한 스크립트만 차단되는 경우가 있다. 이때는 파일에 “웹에서 받은 파일” 표시가 남아 있기 때문이다.
해결 방법은 다음과 같다.
- 스크립트 파일을 마우스 오른쪽 버튼으로 클릭한 후 “속성”을 연다.
- “일반” 탭에서 “차단 해제” 또는 “이 파일은 다른 컴퓨터에서 가져온 것이며…” 메시지가 보이면 체크하고 “적용”을 누른다.
- 다시 스크립트를 실행한다.
또는, 서명된 스크립트만 사용하거나, 신뢰할 수 있는 내부 파일 서버로부터 전달받아 사용하는 것도 방법이다.
4.3 그룹 정책(GPO)에 의해 강제로 설정된 경우
도메인 환경(AD)에서는 그룹 정책으로 MachinePolicy 또는 UserPolicy가 설정될 수 있다. 이 경우 로컬에서 Set-ExecutionPolicy를 실행해도 정책이 덮어씌워져 변경이 적용되지 않는다.
이 상황은 Get-ExecutionPolicy -List 결과에서 MachinePolicy 또는 UserPolicy에 값이 있는지로 확인할 수 있다.
5. 실행 정책 초기값 복구 및 안전한 설정 가이드
5.1 범위별 실행 정책을 기본값(Undefined)으로 복구
실행 정책을 여러 번 변경하다 보면 어떤 범위에 어떤 값이 설정되어 있는지 혼란스러워질 수 있다. 이때는 명시적으로 설정한 범위를 Undefined로 되돌려 상위 정책을 따르게 만들 수 있다.
Set-ExecutionPolicy Undefined -Scope CurrentUser Set-ExecutionPolicy Undefined -Scope LocalMachine 이렇게 하면 그룹 정책 또는 기본 설정이 다시 유효하게 적용된다.
5.2 개인 PC에서 권장되는 일반 설정
- 스크립트를 자주 사용하는 개발자·관리자 환경:
RemoteSigned(CurrentUser 또는 LocalMachine) - 스크립트 사용은 필요하지만 인터넷 다운로드 스크립트는 최소화:
AllSigned또는RemoteSigned - 테스트 전용 VM, 일시적인 문제 해결:
Unrestricted또는Bypass를 Process 범위로만 사용
6. 실무에서 자주 사용하는 명령어 정리
현장에서 자주 사용하는 실행 정책 관련 명령을 정리하면 다음과 같다.
| 목적 | 예시 명령어 | 설명 |
|---|---|---|
| 현재 유효 정책 확인 | | 현재 세션에 적용되는 실행 정책을 한 줄로 확인한다. |
| 범위별 정책 확인 | | MachinePolicy, UserPolicy, Process, CurrentUser, LocalMachine 순으로 모든 정책을 보여준다. |
| 사용자 범위 RemoteSigned | | 현재 사용자 계정에만 RemoteSigned 정책을 적용한다. |
| 시스템 전체 RemoteSigned | | 모든 사용자에 대해 RemoteSigned를 설정한다(관리자 권한 필요). |
| 현재 세션만 Bypass | | 현재 PowerShell 프로세스에서만 실행 정책을 무시한다. |
| 호출 시 일회성 Bypass | | 전역 정책은 유지한 채 특정 호출에만 Bypass를 적용한다. |
| 정책 범위 초기화 | | 해당 범위의 명시적 설정을 제거하여 상위 정책을 따르게 한다. |
7. 보안상 주의사항 및 운영 팁
- 실행 정책 완화는 반드시 필요 최소 범위·기간으로 한정하는 것이 좋다.
- 인터넷에서 다운로드한 스크립트는 출처를 확인하고, 가능하면 코드 내용을 직접 검토한 후 실행해야 한다.
- 업무용 환경에서는 코드 서명(코드 서명 인증서)과 버전 관리 시스템(Git 등)을 함께 사용하는 것이 바람직하다.
- 자동화 스크립트는 신뢰할 수 있는 전용 공유 폴더에 보관하고, 변경 이력과 접근 권한을 관리해야 한다.
- 실행 정책을 크게 완화하는 작업은 변경 이력(날짜, 변경자, 이유)을 남겨 두면 추후 사고 분석과 감시에 도움이 된다.
FAQ
Q1. Unrestricted로 바꿔도 괜찮은가?
개인용 테스트 PC나 일시적인 문제 해결을 위한 가상 머신에서는 Unrestricted 사용이 가능하지만, 업무용 PC나 서버에서는 권장하지 않는다. 특히 민감한 데이터가 있는 시스템에서는 RemoteSigned 수준을 기본으로 두고, 필요한 경우에만 Process 범위에서 일시적으로 완화하는 것이 안전하다.
Q2. RemoteSigned와 Bypass의 차이는 무엇인가?
RemoteSigned는 로컬에서 직접 작성한 스크립트는 제한 없이 실행하되, 인터넷에서 내려받은 스크립트는 서명이 있어야 실행하는 정책이다. Bypass는 실행 정책 검사를 거의 하지 않아, 서명 여부나 출처에 상관없이 스크립트가 실행된다. 따라서 Bypass는 특정 자동화 시나리오에서만 제한적으로 사용하는 것이 좋다.
Q3. 실행 정책을 바꿨는데도 여전히 스크립트가 실행되지 않는다.
이 경우 그룹 정책(MachinePolicy, UserPolicy)에 의해 실행 정책이 강제로 지정되었을 가능성이 있다. Get-ExecutionPolicy -List로 MachinePolicy/UserPolicy 값을 확인하고, 값이 설정되어 있다면 IT 관리자에게 정책 변경을 요청해야 한다. 또한, 특정 보안 솔루션이 스크립트를 별도로 차단하는 경우도 있으므로 해당 제품의 정책도 함께 확인해야 한다.
Q4. 실행 정책을 바꾸면 법적 문제나 라이선스 위반이 될 수 있는가?
실행 정책 자체는 PowerShell의 설정 옵션이므로, 이를 변경하는 행위만으로 라이선스를 위반하는 것은 일반적으로 아니다. 다만 회사 내부 보안 규정이나 정보보호 지침을 위반할 수 있으므로, 조직 소유 장비에서는 반드시 내부 규정을 확인하고, 필요 시 보안 담당자의 승인을 받는 것이 안전하다.
Q5. 기본값으로 완전히 되돌리는 가장 쉬운 방법은 무엇인가?
별도의 그룹 정책이 없는 개인 PC 기준으로는 CurrentUser 및 LocalMachine 범위에 설정된 값을 Undefined로 되돌리는 것이 기본값 복구에 가깝다. 그 후 다시 로그인하거나 PowerShell을 새로 열어 실행 정책을 확인한다. 도메인 환경에서는 그룹 정책으로 지정된 값이 기본값처럼 동작하므로, 이 경우에는 IT 정책을 따르는 것이 원칙이다.
- 공유 링크 만들기
- X
- 이메일
- 기타 앱