Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell 스크립트 실행 정책 구성

기본적으로 Windows 설정은 PowerShell 스크립트가 실행되지 않도록 합니다. 보안 관점에서 신뢰할 수 없는 악성 코드가 PowerShell 스크립트에서 실행되는 것을 제한하는 것이 중요합니다. 실행 정책은 PowerShell 스크립트를 실행하기 위한 설정을 결정합니다. 이 기사에서는 Windows에서 PS 스크립트를 실행하기 위해 사용 가능한 설정, 실행 정책을 변경하는 방법 및 GPO를 사용하여 도메인 컴퓨터에 대한 PowerShell 스크립트 실행 정책을 구성하는 방법을 살펴보겠습니다.

이 시스템에서 PowerShell 스크립트 실행이 비활성화됨

깨끗한 Windows 10에서 PowerShell 스크립트(PS1 파일)를 실행하려고 하면 다음 오류가 발생합니다.

File C:\ps\script.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

PowerShell 스크립트 실행 정책 구성

다음 명령을 사용하여 Windows에서 PowerShell 스크립트 실행 정책에 대한 현재 설정을 가져올 수 있습니다.

Get-ExecutionPolicy

PowerShell 스크립트 실행 정책 구성

다음 PowerShell 실행 정책 값을 사용할 수 있습니다.

  • 제한됨 – PowerShell 스크립트 실행이 비활성화되어 PS 콘솔에서 대화형 명령만 실행할 수 있습니다.
  • 모두 서명됨 – 신뢰할 수 있는 게시자의 디지털 서명이 있는 서명된 PS 스크립트만 허용됩니다(자체 서명된 인증서를 사용하여 스크립트에 서명하고 이를 신뢰할 수 있는 루트 인증서에 추가할 수 있음). 신뢰할 수 없는 스크립트를 실행할 때 다음 경고가 나타납니다.
    Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers.
  • 원격 서명됨 – 제한 없이 로컬 PowerShell 스크립트를 실행할 수 있습니다. 디지털 서명으로 원격 PS 파일을 실행할 수 있습니다(인터넷에서 다운로드하거나 UNC 경로를 통해 공유 네트워크 폴더에서 시작한 PS1 파일은 실행할 수 없음).
  • 무제한 – 모든 PowerShell 스크립트를 실행할 수 있습니다. 타사 PowerShell 스크립트를 실행하려고 하면 시작을 확인하라는 메시지가 표시될 수 있습니다(아래 참조).
  • 우회 – 모든 PS 파일 실행이 허용됩니다(경고가 표시되지 않음). 이 정책은 일반적으로 알림을 표시하지 않고 PS 스크립트를 자동으로 실행하는 데 사용되며(예:스크립트가 GPO, SCCM, 작업 스케줄러 등을 통해 실행되는 경우) 영구적으로 사용하지 않는 것이 좋습니다.
  • 기본값 – PowerShell 스크립트 실행 설정을 기본 설정으로 재설정합니다. Windows 10 PowerShell 실행 정책의 기본값은 제한됨입니다. 및 Windows Server 2016 RemoteSigned입니다. .
  • 정의되지 않음 – 정책이 설정되지 않았습니다. 제한된 정책은 데스크톱 OS에 적용되고 RemoteSigned는 서버에 적용됩니다.

실행 정책을 사용하여 PowerShell에서 스크립트를 실행하도록 허용하는 방법은 무엇입니까?

PowerShell 스크립트 실행 정책의 현재 값을 변경하려면 Set-ExecutionPolicy cmdlet이 사용됩니다.

예를 들어 로컬 PS 스크립트 파일을 실행하도록 허용합니다.

Set-ExecutionPolicy RemoteSigned

Y를 눌러 PS1 스크립트에 대한 실행 정책 변경을 확인합니다. 또는 A .

PowerShell 스크립트 실행 정책 구성

확인 메시지를 표시하지 않으려면 강제 매개변수.

Set-ExecutionPolicy RemoteSigned –Force

PowerShell 실행 정책의 값을 무제한으로 설정한 경우 , UNC 경로 또는 인터넷에서 다운로드한 파일을 통해 공유 폴더에서 원격 스크립트를 실행하려고 할 때 여전히 프롬프트가 표시됩니다.

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

PowerShell 스크립트 실행 정책 구성

PowerShell은 로컬 스크립트와 원격 스크립트를 어떻게 구별하나요? ZoneId 때문입니다. 파일을 다운로드할 때 브라우저가 대체 스트림에 설정하는 식별자(Windows는 파일이 인터넷에서 다운로드되었는지 여부를 어떻게 알 수 있습니까? 문서 참조). 차단 해제를 선택하여 파일 차단을 해제할 수 있습니다. 파일 속성에서 또는 Unblock-File을 사용하여 영역 레이블을 지웁니다. cmdlet.

또한 PowerShell 실행 정책의 다양한 범위를 구별해야 합니다.

  • 머신 정책 – GPO를 사용하여 설정되며 컴퓨터의 모든 사용자에게 적용됩니다.
  • 사용자 정책 – GPO를 사용하여 설정하고 컴퓨터 사용자에게 적용합니다.
  • 프로세스 — 실행 정책 설정은 현재 PowerShell 세션에만 적용됩니다(powershell.exe 프로세스가 종료된 후 재설정됨).
  • 현재 사용자 – 실행 정책은 현재 사용자에게만 적용됩니다(HKEY_CURRENT_USER 레지스트리 키의 매개변수).
  • 로컬 머신 컴퓨터의 모든 사용자를 위한 정책입니다(HKEY_LOCAL_MACHINE 레지스트리 키의 매개변수).

범위 를 사용하여 정책 범위를 설정할 수 있습니다. Set-ExecutionPolicy cmdlet의 매개 변수입니다. 예:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

모든 범위에 대한 현재 ExecutionPolicy 설정을 확인하겠습니다.

Get-ExecutionPolicy -List

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

PowerShell 스크립트 실행 정책 구성

CurrentUser 및 LocalMachine 범위에 대해 Set-ExecutionPolicy cmdlet을 사용하여 설정한 실행 정책 값은 레지스트리에 저장됩니다. 예를 들어 다음 명령을 실행하십시오.

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 레지스트리 키를 열고 ExecutionPolicy의 REG_SZ 값을 확인합니다. 매개변수. Restricted(허용되는 매개변수 값은 Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted)로 변경되어야 합니다. 및 정의되지 않음).

PowerShell 스크립트 실행 정책 구성

CurrentUser 범위에 대한 동일한 설정은 HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell에 있습니다. .

즉, 그룹 정책 기본 설정을 사용하여 레지스트리를 통해 PowerShell 스크립트 실행 정책 설정을 배포할 수 있습니다.

AllSigned가 있는 ExecutionPolicy는 LocalMachine 수준의 값은 기업 환경에서 가장 자주 사용됩니다. 보안과 편의성 사이에서 최상의 균형을 제공합니다. 개인 용도의 경우 컴퓨터에서 RemoteSigned 설정을 사용할 수 있습니다. 우회 정책은 일부 작업을 실행하는 데만 사용할 수 있습니다(예:GPO를 사용하여 스크립트를 실행하거나 작업 스케줄러에서 작업).

GPO를 사용하여 Active Directory에서 PowerShell 실행 정책 설정

그룹 정책을 사용하여 Active Directory 도메인의 서버 또는 도메인 컴퓨터에서 PowerShell 스크립트에 대한 실행 정책을 구성할 수 있습니다.

  1. 도메인 GPO 편집기(gpmc.msc ), 새 GPO를 만들거나 기존 GPO를 편집하고 PowerShell 스크립트 실행 정책을 적용하려는 컴퓨터가 포함된 OU에 연결합니다.
  2. 컴퓨터 열기 구성 -> 정책 -> 관리 템플릿 -> Windows 구성 요소 -> Windows PowerShell GPO 편집기에서 스크립트 실행 켜기를 찾습니다. 매개변수. 사용자 GPO 섹션(사용자 구성)에도 동일한 정책이 있지만 컴퓨터 정책의 우선 순위가 더 높습니다.
  3. 정책에는 세 가지 값이 있을 수 있습니다.
    1. 서명된 스크립트만 허용 – AllSigned 정책에 해당
    2. 로컬 스크립트 및 원격 서명 스크립트 허용 – PS RemoteSigned 정책에 해당
    3. 모든 스크립트 허용 – 무제한 정책에 해당
      PowerShell 스크립트 실행 정책 구성
  4. 원하는 정책 값을 설정하고 컴퓨터에 GPO를 저장하고 그룹 정책 설정을 업데이트합니다.
  5. MachinePolicy 범위에 새 실행 설정이 적용되었는지 확인하십시오.
    PowerShell 스크립트 실행 정책 구성

GPO를 사용하여 실행 정책을 구성한 후에는 스크립트 실행 정책 설정을 수동으로 변경할 수 없습니다. GPO가 적용된 컴퓨터에서 실행 정책 설정을 변경하려고 하면 다음 오류가 나타납니다.

Set-ExecutionPolicy: Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

PowerShell 스크립트 실행 정책 구성

같은 방식으로 로컬 GPO 편집기(gpedit.msc)를 사용하여 독립 실행형 컴퓨터에서 실행 정책을 구성할 수 있습니다.

Windows에서 PowerShell 실행 정책을 우회하는 방법

실행 정책 설정을 변경하지 않고 컴퓨터에서 PowerShell 스크립트를 실행하려는 경우 도움이 될 수 있는 몇 가지 트릭이 있습니다. 예를 들어, 관리자 권한으로 실행되는지 확인하는 간단한 PS1 스크립트를 실행하고 싶습니다.

Get-Content를 사용하여 스크립트 내용을 가져와 PS 콘솔의 표준 입력 스트림으로 리디렉션할 수 있습니다.

Get-Content c:\ps\check_process_elevation.ps1 | PowerShell.exe -noprofile –

또는 우회 정책을 사용하여 새 powershell.exe 프로세스를 실행할 수 있습니다.

powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1

PowerShell 스크립트 실행 정책 구성