about_Execution_Policies

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

항목

about_Execution_Policies

간단한 설명

Windows PowerShell® 실행 정책과 이러한 정책의 관리 방법에 대해 설명합니다.

자세한 설명

Windows PowerShell 실행 정책을 사용하면 Windows PowerShell가 구성 파일을 로드하고 스크립트를 실행하는 조건을 결정할 수 있습니다.

로컬 컴퓨터, 현재 사용자 또는 특정 세션에 대한 실행 정책을 설정할 수 있습니다. 또한 그룹 정책 설정을 사용하여 컴퓨터와 사용자에 대한 실행 정책을 설정할 수 있습니다.

로컬 컴퓨터와 현재 사용자에 대한 실행 정책은 레지스트리에 저장됩니다. 사용자의 Windows PowerShell 프로필에 실행 정책을 설정할 필요는 없습니다. 특정 세션에 대한 실행 정책은 메모리에만 저장되며 세션을 닫으면 사라집니다.

실행 정책은 사용자 작업을 제한하는 보안 시스템이 아닙니다. 예를 들어 사용자는 스크립트를 실행할 수 없을 때 명령줄에서 스크립트 내용을 입력하여 정책을 쉽게 우회할 수 있습니다. 그 대신 실행 정책은 사용자가 기본 규칙을 설정하도록 도와 주며 사용자가 의도하지 않게 규칙을 위반하지 않도록 합니다.

Windows PowerShell 실행 정책

Windows PowerShell 실행 정책은 다음과 같습니다.

"Restricted"가 기본 정책입니다.

RESTRICTED

- Windows 8, Windows Server 2012 및 Windows 8.1의 기본 실행 정책.

- 개별 명령을 허용하지만 스크립트를 실행하지 않습니다.

- 서식 설정 및 구성 파일(.ps1xml), 모듈 스크립트 파일(.psm1) 및 Windows PowerShell 프로필(.ps1)을 포함한 모든 스크립트 파일의 실행을 금지합니다.

ALLSIGNED

- 스크립트가 실행할 수 있습니다.

- 로컬 컴퓨터에서 작성하는 스크립트를 포함하여 모든 스크립트와 구성 파일에 신뢰할 수 있는 판매자의 서명이 있어야 합니다.

- 아직 신뢰할 수 있음 또는 신뢰할 수 없음으로 분류하지 않은 게시자의 스크립트를 실행하기 전에 프롬프트를 표시합니다.

- 서명되었지만 악성 스크립트를 실행할 위험이 있습니다.

REMOTESIGNED

- 스크립트가 실행할 수 있습니다. Windows Server 2012 R2의 기본 실행 정책입니다.

- 신뢰할 수 있는 게시자로부터 인터넷에서 다운로드한 스크립트 및 구성 파일(전자 메일 및 인스턴트 메시징 프로그램 포함)에 대한 디지털 서명을 요구합니다.

- 로컬 컴퓨터에 쓴(인터넷에서 다운로드하지 않은) 스크립트에 대해서는 디지털 서명을 요구하지 않습니다.

- 스크립트가 차단되지 않은 경우 인터넷에서 다운로드하고 서명되지 않은 스크립트를 실행합니다(예: Unblock-File cmdlet 사용).

- 인터넷 이외의 출처의 서명되지 않은 스크립트 및 서명되었지만 악성 스크립트를 실행할 위험이 있습니다.

UNRESTRICTED

- 서명되지 않은 스크립트가 실행할 수 있습니다. (악성 스크립트를 실행할 위험이 있습니다.)

- 인터넷에서 다운로드한 스크립트 및 구성 파일을 실행하기 전에 사용자에게 경고합니다.

BYPASS

- 아무 것도 차단되지 않으며 경고 또는 프롬프트가 없습니다.

- 이 실행 정책은 Windows PowerShell 스크립트가 더 큰 응용 프로그램에 기본 제공되는 구성 또는 Windows PowerShell가 자체 보안 모델을 가지고 있는 프로그램의 기초인 구성을 위한 것입니다.

UNDEFINED

- 현재 범위에 설정된 실행 정책이 없습니다.

- 모든 범위의 실행 정책이 Undefined인 경우 효과적인 실행 정책은 기본 실행 정책인 Restricted입니다.

참고: 범용 명명 규칙(UNC) 경로를 인터넷 경로와 구분하지 않는 시스템에서 UNC 경로로 식별된 스크립트는 RemoteSigned 실행 정책을 사용하여 실행하는 것을 허용하지 않을 수 있습니다.

실행 정책 범위

특정 범위에서만 효과가 있는 실행 정책을 설정할 수 있습니다.

Scope 영역의 유효한 값은 Process, CurrentUser 및 LocalMachine입니다. LocalMachine은 실행 정책을 설정할 때 기본값입니다.

Scope 값은 우선 순위대로 나열됩니다.

- PROCESS

실행 정책이 현재 세션(현재 Windows PowerShell 프로세스)에만 영향을 줍니다.

실행 정책은 레지스트리가 아닌 $env:PSExecutionPolicyPreference 환경 변수에 저장되며 세션을 닫으면 삭제됩니다. 변수 값을 편집하여 정책을 변경할 수 없습니다.

- CURRENTUSER

실행 정책이 현재 사용자에게만 영향을 줍니다. 이 값은 HKEY_CURRENT_USER 레지스트리 하위 키에 저장됩니다.

- LOCALMACHINE

실행 정책이 현재 컴퓨터의 모든 사용자에게 영향을 줍니다. 이 값은 HKEY_LOCAL_MACHINE 레지스트리 하위 키에 저장됩니다.

우선 적용되는 정책은 우선 순위가 낮은 수준에서 더 제한적인 정책을 설정했더라도 현재 세션에서만 유효합니다.

자세한 내용은 Set-ExecutionPolicy를 참조하세요.

자신의 실행 정책 가져오기

현재 세션에 유효한 Windows PowerShell 실행 정책을 가져오려면 Get-ExecutionPolicy cmdlet을 사용합니다.

다음 명령은 현재 실행 정책을 가져옵니다.

Get-ExecutionPolicy    

현재 세션에 영향을 주는 모든 실행 정책을 가져와서 우선 순위 순서대로 표시하려면 다음과 같이 입력합니다.

        Get-ExecutionPolicy -List

결과는 다음 샘플 출력과 유사하게 보입니다.

                  Scope    ExecutionPolicy
                  -----    ---------------
          MachinePolicy          Undefined
             UserPolicy          Undefined
                Process          Undefined
            CurrentUser       RemoteSigned
           LocalMachine          AllSigned

이 경우 현재 사용자에 대한 실행 정책이 로컬 컴퓨터에 대해 설정된 실행 정책보다 우선하므로 효과적인 실행 정책은 RemoteSigned입니다.

특정 범위에 대해 설정된 실행 정책을 가져오려면 Get-ExecutionPolicy의 Scope 매개 변수를 사용합니다.

예를 들어 다음 명령은 현재 사용자 범위에 대한 실행 정책을 가져옵니다.

        Get-ExecutionPolicy -Scope CurrentUser
        

자신의 실행 정책 변경

자신의 컴퓨터에 있는 Windows PowerShell 실행 정책을 변경하려면 Set-ExecutionPolicy cmdlet을 사용합니다.

변경 내용은 즉시 적용되며 Windows PowerShell를 다시 시작할 필요가 없습니다.

로컬 컴퓨터(기본값) 또는 현재 사용자에 대한 실행 정책을 설정한 경우 변경 내용은 레지스트리에 저장되며 다시 변경할 때까지 남아 있습니다.

현재 프로세스에 대한 실행 정책을 설정한 경우 레지스트리에 저장되지 않습니다. 이는 현재 프로세스와 하위 프로세스를 닫을 때까지 보관됩니다.

참고: Windows Vista 이상 버전의 Windows에서 로컬 컴퓨터(기본값)에 대한 실행 정책을 변경하는 명령을 실행하려면 "관리자 권한으로 실행" 옵션을 사용하여 Windows PowerShell을 시작합니다.

자신의 실행 정책을 변경하려면 다음과 같이 입력합니다.

        Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

예를 들면 다음과 같습니다.

        Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

특정 범위의 실행 정책을 설정하려면 다음과 같이 입력합니다.

        Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

예를 들면 다음과 같습니다.

        Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

실행 정책을 변경하는 명령은 성공할 수 있지만 역시 유효한 실행 정책을 변경하지 않습니다.

예를 들어 로컬 컴퓨터에 대한 실행 정책을 설정하는 명령은 성공할 수 있지만 현재 사용자에 대한 실행 정책에 의해 재정의될 수 있습니다.

자신의 실행 정책 제거

특정 범위에 대한 실행 정책을 제거하려면 실행 정책의 값을 Undefined로 설정합니다.

예를 들어 로컬 컴퓨터의 모든 사용자에 대한 실행 정책을 제거하려면 다음과 같이 입력합니다.

        Set-ExecutionPolicy Undefined

또는 다음을 입력합니다.

        Set-ExecutionPolicy Undefined -scope LocalMachine

어떤 범위에서도 실행 정책이 설정되지 않은 경우 효과적인 실행 정책은 기본값 Restricted입니다.

한 세션에 대해 다른 실행 정책 설정

PowerShell.exe의 ExecutionPolicy 매개 변수를 사용하여 새 Windows PowerShell 세션에 대한 실행 정책을 설정할 수 있습니다. 이 정책은 현재 세션과 하위 세션에만 영향을 줍니다.

새 세션에 대한 실행 정책을 설정하려면 명령줄(예: Cmd.exe 또는 Windows PowerShell)에서 Windows PowerShell를 시작한 다음 PowerShell.exe의 ExecutionPolicy 매개 변수를 사용하여 실행 정책을 설정합니다.

예를 들면 다음과 같습니다.

PowerShell.exe -ExecutionPolicy AllSigned

사용자가 설정하는 실행 정책은 레지스트리에 저장되지 않고 $env:PSExecutionPolicyPreference 환경 변수에 저장됩니다. 이 변수는 정책을 설정한 세션을 닫으면 삭제됩니다. 변수 값을 편집하여 정책을 변경할 수 없습니다.

세션 중에 해당 세션에 대해 설정한 실행 정책은 로컬 컴퓨터 또는 현재 사용자에 대해 레지스트리에 설정한 실행 정책보다 우선합니다. 그러나 그룹 정책 설정(아래에서 설명)을 사용하여 설정한 실행 정책보다 우선하지 않습니다.

그룹 정책을 사용하여 실행 정책 관리

"스크립트 실행 켜기" 그룹 정책 설정을 사용하여 엔터프라이즈에 대한 컴퓨터의 실행 정책을 관리할 수 있습니다. 그룹 정책 설정은 모든 범위에서 Windows PowerShell에 설정한 실행 정책을 재정의합니다.

"스크립트 실행 켜기" 정책 설정은 다음과 같습니다.

-- "스크립트 실행 켜기"를 사용하지 않도록 설정하면 스크립트가 실행되지 않습니다. 이는 "Restricted" 실행 정책과 같습니다.

-- "스크립트 실행 켜기"를 사용하도록 설정하면 실행 정책을 선택할 수 있습니다. 그룹 정책 설정은 다음 실행 정책 설정과 같습니다.

        Group Policy                Execution Policy  
        ------------                ----------------
        Allow all scripts.          Unrestricted

        Allow local scripts         RemoteSigned
        and remote signed
        scripts. 

        Allow only signed           AllSigned
        scripts.

-- "스크립트 실행 켜기"를 구성하지 않았으면 아무 영향도 없습니다. Windows PowerShell에서 설정한 실행 정책은 유효합니다.

PowerShellExecutionPolicy.adm 및 PowerShellExecutionPolicy.admx 파일은 다음과 같은 경로의 그룹 정책 편집기에 있는 컴퓨터 구성 및 사용자 구성 노드에 "스크립트 실행 켜기" 정책을 추가합니다.

        For Windows XP and Windows Server 2003:
        Administrative Templates\Windows Components\Windows PowerShell

        For Windows Vista and later versions of Windows:
        Administrative Templates\Classic Administrative Templates\
        Windows Components\Windows PowerShell

컴퓨터 구성 노드에 설정한 정책은 사용자 구성 노드에 설정한 정책보다 우선합니다.

PowerShellExecutionPolicy.adm 파일은 the Microsoft 다운로드 센터에서 사용할 수 있습니다. 자세한 내용은 https://go.microsoft.com/fwlink/?LinkId=131786의 "Windows PowerShell용 관리 템플릿"을 참조하세요.

자세한 내용은 https://go.microsoft.com/fwlink/?LinkID=251696의 about_Group_Policy_Settings를 참조하세요.

실행 정책 우선 순위

세션에 효과적인 실행 정책을 결정할 때 Windows PowerShell는 실행 정책을 다음과 같은 우선 순위 순서대로 평가합니다.

        - Group Policy: Computer Configuration
        - Group Policy: User Configuration
        - Execution Policy: Process (or PowerShell.exe -ExecutionPolicy)
        - Execution Policy: CurrentUser
        - Execution Policy: LocalMachine    

서명된 및 서명되지 않은 스크립트 관리

Windows PowerShell 실행 정책이 RemoteSigned인 경우 Windows PowerShell는 인터넷에서 다운로드한 서명되지 않은 스크립트(전자 메일 및 인스턴트 메시징 프로그램을 통해 받은 서명되지 않은 스크립트 포함)를 실행하지 않습니다.

스크립트에 서명하거나 실행 정책을 변경하지 않고 서명되지 않은 스크립트를 실행하도록 선택할 수 있습니다.

Windows PowerShell 3.0부터 Get-Item cmdlet의 Stream 매개 변수를 사용하여 차단된 파일(인터넷에서 다운로드했으므로)을 검색할 수 있으며 Unblock-File cmdlet을 사용하여 스크립트를 Windows PowerShell에서 실행할 수 있도록 차단 해제할 수 있습니다.

자세한 내용은 about_Signing, Get-Item 및 Unblock-File을 참조하세요.

참고 항목

about_Environment_Variables

about_Signing

Get-ExecutionPolicy

Set-ExecutionPolicy

Get-Item

Unblock-File

"Windows PowerShell용 관리 템플릿"

(https://go.microsoft.com/fwlink/?LinkId=131786)

"PowerShell.exe 콘솔 도움말"

(https://go.microsoft.com/fwlink/?LinkID=113439)