about_Execution_Policies

간단한 설명

PowerShell 실행 정책을 설명하고 이를 관리하는 방법을 설명합니다.

자세한 설명

PowerShell의 실행 정책은 PowerShell이 구성 파일을 로드하고 스크립트를 실행하는 조건을 제어하는 안전 기능입니다. 이 기능은 악성 스크립트의 실행을 방지하는 데 도움이 됩니다.

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

로컬 컴퓨터 및 현재 사용자에 대한 실행 정책은 레지스트리에 저장됩니다. PowerShell 프로필에서 실행 정책을 설정할 필요가 없습니다. 특정 세션에 대한 실행 정책은 메모리에만 저장되며 세션이 닫혀 있으면 손실됩니다.

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

비 Windows 컴퓨터에서 기본 실행 정책은 Unrestricted 변경할 수 없으며 변경할 수 없습니다. Set-ExecutionPolicy cmdlet을 사용할 수 있지만 PowerShell은 지원되지 않는다는 콘솔 메시지를 표시합니다. 비 Windows 플랫폼에서 반환 Unrestricted 하는 동안 Get-ExecutionPolicy 해당 플랫폼이 Windows 보안 영역을 구현하지 않기 때문에 동작은 실제로 일치 Bypass 합니다.

PowerShell 실행 정책

이러한 정책의 적용은 Windows 플랫폼에서만 발생합니다. PowerShell 실행 정책은 다음과 같습니다.

  • AllSigned

    • 스크립트를 실행할 수 있습니다.
    • 로컬 컴퓨터에서 작성하는 스크립트를 포함하여 신뢰할 수 있는 게시자가 모든 스크립트 및 구성 파일에 서명해야 합니다.
    • 아직 신뢰할 수 있거나 신뢰할 수 없는 것으로 분류되지 않은 게시자의 스크립트를 실행하기 전에 메시지를 표시합니다.
    • 서명되었지만 악의적인 스크립트가 실행될 위험이 있습니다.
  • Bypass

    • 아무것도 차단되지 않으며 경고 또는 프롬프트가 없습니다.
    • 이 실행 정책은 PowerShell 스크립트가 더 큰 애플리케이션에 기본 제공되는 구성 또는 PowerShell이 자체 보안 모델을 가진 프로그램의 기초가 되는 구성을 위해 설계되었습니다.
  • Default

    • 기본 실행 정책을 설정합니다.
    • Restricted Windows 클라이언트의 경우
    • Windows 서버용 RemoteSigned .
  • RemoteSigned

    • Windows 서버 컴퓨터에 대한 기본 실행 정책입니다.
    • 스크립트를 실행할 수 있습니다.
    • 전자 메일 및 인스턴트 메시징 프로그램을 포함하는 인터넷에서 다운로드되는 스크립트 및 구성 파일에 대해 신뢰할 수 있는 게시자의 디지털 서명이 필요합니다.
    • 로컬 컴퓨터에 작성되고 인터넷에서 다운로드되지 않은 스크립트에는 디지털 서명이 필요하지 않습니다.
    • cmdlet을 사용하는 등 스크립트가 차단 해제된 경우 인터넷에서 다운로드되고 서명되지 않은 스크립트를 Unblock-File 실행합니다.
    • 악의적일 수 있는 인터넷 및 서명된 스크립트 이외의 원본에서 서명되지 않은 스크립트를 실행할 위험이 있습니다.
  • Restricted

    • Windows 클라이언트 컴퓨터에 대한 기본 실행 정책입니다.
    • 개별 명령을 허용하지만 스크립트는 허용하지 않습니다.
    • 서식 및 구성 파일(), 모듈 스크립트 파일() 및 PowerShell 프로필(.ps1xml.psm1)을 비롯한 모든 스크립트 파일의 실행을 방지합니다.ps1.
  • Undefined

    • 현재 범위에는 실행 정책이 설정되지 않습니다.
    • 모든 범위 Undefined의 실행 정책이 있는 경우 유효한 실행 정책은 Restricted Windows 클라이언트 및 Windows Server용 RemoteSigned 에 대한 것입니다.
  • Unrestricted

    • Windows가 아닌 컴퓨터에 대한 기본 실행 정책이며 변경할 수 없습니다.
    • 서명되지 않은 스크립트를 실행할 수 있습니다. 악의적인 스크립트를 실행할 위험이 있습니다.
    • 로컬 인트라넷 영역이 아닌 스크립트 및 구성 파일을 실행하기 전에 사용자에게 경고합니다.

    참고 항목

    UNC(유니버설 명명 규칙) 경로를 인터넷 경로와 구분하지 않는 시스템에서 UNC 경로로 식별되는 스크립트는 RemoteSigned 실행 정책을 사용하여 실행할 수 없습니다.

실행 정책 범위

특정 범위에서만 적용되는 실행 정책을 설정할 수 있습니다.

유효한 값 Scope 은 UserPolicy, , ProcessCurrentUserLocalMachine입니다.MachinePolicy LocalMachine 은 실행 정책을 설정할 때 기본값입니다.

값은 Scope 우선 순위로 나열됩니다. 더 제한적인 정책이 낮은 우선 순위 수준으로 설정된 경우에도 현재 세션에서 우선 순위가 적용되는 정책이 적용됩니다.

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

  • MachinePolicy

    컴퓨터의 모든 사용자에 대해 그룹 정책에 의해 설정됩니다.

  • UserPolicy

    컴퓨터의 현재 사용자에 대한 그룹 정책에 의해 설정됩니다.

  • Process

    범위는 Process 현재 PowerShell 세션에만 영향을 줍니다. 실행 정책은 레지스트리가 아닌 환경 변수 $env:PSExecutionPolicyPreference에 저장됩니다. PowerShell 세션을 닫으면 변수와 값이 삭제됩니다.

  • CurrentUser

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

  • LocalMachine

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

PowerShell을 사용하여 실행 정책 관리

현재 PowerShell 세션에 대한 유효 실행 정책을 얻으려면 cmdlet을 Get-ExecutionPolicy 사용합니다.

다음 명령은 유효한 실행 정책을 가져옵니다.

Get-ExecutionPolicy

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

Get-ExecutionPolicy -List

결과는 다음 샘플 출력과 유사합니다.

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

이 경우 현재 사용자의 실행 정책이 로컬 컴퓨터에 대해 설정된 실행 정책 보다 우선하기 때문에 유효한 실행 정책은 RemoteSigned 입니다.

특정 범위에 대한 실행 정책 집합을 얻으려면 의 Get-ExecutionPolicy매개 변수를 Scope 사용합니다.

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

Get-ExecutionPolicy -Scope CurrentUser

실행 정책 변경

Windows 컴퓨터에서 PowerShell 실행 정책을 변경하려면 cmdlet을 Set-ExecutionPolicy 사용합니다. 변경 내용은 즉시 적용됩니다. PowerShell을 다시 시작할 필요가 없습니다.

LocalMachine 또는 CurrentUser 범위에 대한 실행 정책을 설정하면 변경 내용이 레지스트리에 저장되고 다시 변경할 때까지 다시 기본 적용됩니다.

범위에 대한 Process 실행 정책을 설정하면 레지스트리에 저장되지 않습니다. 실행 정책은 현재 프로세스와 모든 자식 프로세스가 닫을 때까지 유지됩니다.

참고 항목

Windows Vista 이상 버전의 Windows에서 로컬 컴퓨터 LocalMachine 범위에 대한 실행 정책을 변경하는 명령을 실행하려면 관리자 권한으로 실행 옵션을 사용하여 PowerShell을 시작합니다.

실행 정책을 변경하려면 다음을 수행합니다.

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

예시:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

특정 범위에서 실행 정책을 설정하려면 다음을 수행합니다.

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

예시:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

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

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

실행 정책 제거

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

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

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

에 대한 Scope실행 정책을 제거하려면:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

어떤 범위에서도 실행 정책이 설정되지 않은 경우 유효한 실행 정책은 RestrictedWindows 클라이언트의 기본값입니다.

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

ExecutionPolicy 매개 변수 pwsh.exe사용하여 새 PowerShell 세션에 대한 실행 정책을 설정할 수 있습니다. 정책은 현재 세션 및 자식 세션에만 영향을 줍니다.

새 세션에 대한 실행 정책을 설정하려면 PowerShell과 같은 cmd.exe 명령줄에서 PowerShell을 시작한 다음 ExecutionPolicy 매개 변수 pwsh.exe 를 사용하여 실행 정책을 설정합니다.

예시:

pwsh.exe -ExecutionPolicy AllSigned

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

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

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

스크립트 실행 켜기 그룹 정책을 사용하여 기업 내 컴퓨터의 실행 정책을 관리할 수 있습니다. 그룹 정책 설정은 모든 범위에서 PowerShell에 설정된 실행 정책을 재정의합니다.

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

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

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

    그룹 정책 실행 정책
    모든 스크립트 허용 Unrestricted
    로컬 스크립트 및 원격 서명 스크립트 허용 RemoteSigned
    서명된 스크립트만 허용 AllSigned
  • 스크립트 실행 켜기가 구성되지 않은 경우 아무 효과가 없습니다. PowerShell에서 설정한 실행 정책이 유효합니다.

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

Windows XP 및 Windows Server 2003의 경우:

Administrative Templates\Windows Components\Windows PowerShell

Windows Vista 및 이후 버전의 Windows:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

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

자세한 내용은 about_Group_Policy_Settings를 참조하세요.

실행 정책 우선 순위

세션에 대한 유효 실행 정책을 결정할 때 PowerShell은 다음 우선 순위로 실행 정책을 평가합니다.

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: LocalMachine
Execution Policy: CurrentUser

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

Windows에서 Internet Explorer 및 Microsoft Edge와 같은 프로그램은 다운로드된 파일에 대체 데이터 스트림을 추가합니다. 이렇게 하면 파일이 "인터넷에서 오는 것"으로 표시됩니다. PowerShell 실행 정책이 RemoteSigned인 경우 PowerShell은 전자 메일 및 인스턴트 메시징 프로그램을 포함하는 인터넷에서 다운로드된 서명되지 않은 스크립트를 실행하지 않습니다.

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

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

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

참고 항목

파일을 다운로드하는 다른 방법은 파일이 인터넷 영역에서 오는 것으로 표시되지 않을 수 있습니다. 일부 사례:

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Windows Server Core 및 Window Nano Server의 실행 정책

특정 조건에서 Windows Server Core 또는 Windows Nano Server에서 PowerShell 6을 실행하는 경우 다음 오류와 함께 실행 정책이 실패할 수 있습니다.

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell은 Windows 데스크톱 셸(explorer.exe)의 API를 사용하여 스크립트 파일의 영역 유효성을 검사합니다. Windows 셸은 Windows Server Core 및 Windows Nano Server에서 사용할 수 없습니다.

Windows 데스크톱 셸을 사용할 수 없거나 응답하지 않는 경우 Windows 시스템에서도 이 오류가 발생할 수 있습니다. 예를 들어 로그온하는 동안 PowerShell 로그온 스크립트는 Windows 데스크톱이 준비되기 전에 실행을 시작하여 오류가 발생할 수 있습니다.

ByPass 또는 AllSigned실행 정책을 사용하면 문제를 방지하는 영역 검사 필요하지 않습니다.

참고 항목