about_Group_Policy_Settings — PowerShell 그룹 정책 설정
about_Group_Policy_Settings — PowerShell 그룹 정책 설정
회사 같은 기업 환경에서는 여러 대의 Windows 컴퓨터에 같은 설정을 일관되게 적용해야 할 때가 많아요. 이때 운영자가 윈도우마다 손으로 값을 맞추는 대신, **Group Policy(그룹 정책)**로 한 번에 관리하면 정말 편리한데요. PowerShell에는 바로 이런 규칙을 만들 수 있게 해 주는 그룹 정책 설정이 따로 준비되어 있어요. 이 문서에서는 그 설정들이 어디에 있고, 각각 어떤 일을 하는지 정리해 볼게요.
출처: about_Group_Policy_Settings - PowerShell | Microsoft Learn
본문
PowerShell의 그룹 정책 설정은 기업 환경의 Windows 컴퓨터에 일관된 구성 값을 정의할 수 있게 도와줘요. 이 설정들은 다음 그룹 정책 경로 아래에 위치해요.
Computer Configuration\
Administrative Templates\
PowerShell Core
User Configuration\
Administrative Templates\
PowerShell Core
Computer Configuration 경로의 그룹 정책 설정은 User Configuration 경로의 설정보다 우선 적용돼요. PowerShell 7에는 그룹 정책 템플릿과 설치 스크립트가 $PSHOME에 포함되어 있어요. 그룹 정책 도구는 관리 템플릿 파일(.admx, .adml)을 사용해 사용자 인터페이스에 정책 설정을 표시하는데, 덕분에 관리자는 레지스트리 기반의 정책 설정을 관리할 수 있죠. InstallPSCorePolicyDefinitions.ps1 스크립트는 PowerShell Core 관리 템플릿을 로컬 머신에 설치해 줘요.
Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
Directory: C:\Program Files\PowerShell\7
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2020 12:38 AM 15861 InstallPSCorePolicyDefinitions.ps1
-a--- 2/27/2020 12:28 AM 9675 PowerShellCoreExecutionPolicy.adml
-a--- 2/27/2020 12:28 AM 6201 PowerShellCoreExecutionPolicy.admx
템플릿을 설치하고 나면 그룹 정책 편집기(gpedit.msc)에서 이 설정들을 편집할 수 있어요. 정책은 다음과 같아요.
- Console session configuration — PowerShell이 실행되는 구성 엔드포인트를 설정해요.
- Turn on Module Logging — 모듈의
LogPipelineExecutionDetails속성을 설정해요. - Turn on PowerShell Script Block Logging — 모든 PowerShell 스크립트의 상세 로깅을 활성화해요.
- Turn on Script Execution — PowerShell 실행 정책(execution policy)을 설정해요.
- Turn on PowerShell Transcription — PowerShell 명령의 입력·출력을 텍스트 기반 트랜스크립트로 캡처하게 해요.
- Set the default source path for Update-Help — Updatable Help의 소스를 인터넷이 아닌 디렉터리로 설정해요.
각 PowerShell 그룹 정책 설정에는 'Use Windows PowerShell Policy setting' 필드가 있어요. 이 옵션을 쓰면 아래 그룹 정책 경로에 있는 비슷한 Windows PowerShell 그룹 정책 설정의 값을 그대로 사용할 수 있어요.
Computer Configuration\
Administrative Templates\
Windows Components\
Windows PowerShell
User Configuration\
Administrative Templates\
Windows Components\
Windows PowerShell
참고: 이 PowerShell Core 관리 템플릿에는 Windows PowerShell용 설정이 포함되어 있지 않아요. 다른 템플릿을 받는 방법이나 그룹 정책 구성에 대한 자세한 내용은 Windows에서 그룹 정책 중앙 저장소 만들기 및 관리(How to create and manage the Central Store for Group Policy Administrative Templates in Windows) 문서를 참고하세요.
Console session configuration
이 정책 설정은 PowerShell이 실행되는 구성 엔드포인트(configuration endpoint)를 지정해요. 로컬 머신에 등록된 어떤 엔드포인트든 가능한데, 기본 PowerShell 원격 엔드포인트나 특정 사용자 역할 기능을 갖춘 사용자 지정 엔드포인트도 포함돼요.
Turn on Module Logging
이 정책은 선택한 PowerShell 모듈에 대한 로깅을 켜요. 이 설정은 영향을 받는 모든 컴퓨터의 모든 세션에 적용돼요.
이 정책을 사용하도록 설정하고 모듈을 하나 이상 지정하면, PowerShell이 이벤트 뷰어(Event Viewer)의 Windows PowerShell 로그에 해당 모듈의 파이프라인 실행 이벤트를 기록해요. 비활성화하면 PowerShell은 어떤 모듈의 실행 이벤트도 기록하지 않아요.
이 정책이 구성되지 않으면 각 모듈의 LogPipelineExecutionDetails 속성이 PowerShell이 그 모듈의 실행 이벤트를 기록할지 결정해요. 기본적으로 모든 모듈의 LogPipelineExecutionDetails 속성은 $false로 설정되어 있어요. 모듈에 대한 모듈 로깅을 켜려면 다음 명령 형식을 사용해요. 모듈은 세션에 가져와야(import) 하고, 설정은 현재 세션에서만 유효해요.
Import-Module <Module-Name>
(Get-Module <Module-Name>).LogPipelineExecutionDetails = $true
특정 컴퓨터의 모든 세션에 대해 모듈 로깅을 켜려면 위 명령들을 'All Users' PowerShell 프로필($PROFILE.AllUsersAllHosts)에 추가하면 돼요. 모듈 로깅에 대한 자세한 내용은 about_Modules 문서를 참고하세요.
Turn on PowerShell scriptblock logging
이 정책은 모든 PowerShell 스크립트 입력을 Microsoft-Windows-PowerShell/Operational 이벤트 로그에 기록하도록 해요. 사용하도록 설정하면 PowerShell이 명령, 스크립트블록, 함수, 스크립트의 처리 과정을 로그로 남겨요. 이때 대화형(interactive)으로 실행됐든 자동화로 실행됐든 모두 기록돼요.
비활성화하면 PowerShell 스크립트 입력이 기록되지 않아요. 그리고 Script Block Invocation Logging을 사용하면 명령·스크립트블록·함수·스크립트의 호출이 시작되거나 끝날 때도 이벤트로 기록해요. 다만 Invocation Logging을 켜면 이벤트 로그의 양이 아주 많아지니 주의해야 해요.
Turn on Script Execution
이 정책은 컴퓨터와 사용자의 실행 정책(execution policy)을 설정해요. 실행 정책은 스크립트 실행을 허용할지 여부를 결정해요. 이 정책을 사용하도록 설정하면 다음 중 하나를 선택할 수 있어요.
- Allow only signed scripts — 신뢰할 수 있는 게시자가 서명한 스크립트만 실행해요.
AllSigned실행 정책과 동일해요. - Allow local scripts and remote signed scripts — 모든 로컬 스크립트를 실행해요. 인터넷에서 가져온 스크립트는 신뢰할 수 있는 게시자의 서명이 필요해요.
RemoteSigned실행 정책과 동일해요. - Allow all scripts — 모든 스크립트를 실행해요.
Unrestricted실행 정책과 동일해요.
이 정책을 비활성화하면 어떤 스크립트도 실행할 수 없어요. Restricted 실행 정책과 동일해요. 구성하지 않으면 Set-ExecutionPolicy cmdlet으로 컴퓨터나 사용자에 설정된 실행 정책이 스크립트 실행 허용 여부를 결정해요. 기본값은 Restricted예요. 자세한 내용은 about_Execution_Policies 문서를 참고하세요.
Turn on PowerShell Transcription
이 정책은 PowerShell 명령의 입력과 출력을 텍스트 기반 트랜스크립트로 캡처할 수 있게 해 줘요. 사용하도록 설정하면 PowerShell과 PowerShell 엔진을 사용하는 다른 애플리케이션 모두에 대해 트랜스크립션 로깅이 켜져요. 기본적으로 PowerShell은 각 사용자의 내 문서(My Documents) 디렉터리에 트랜스크립트 출력을 기록하는데, 파일 이름에는 PowerShell_transcript와 함께 컴퓨터 이름, 시작 시각이 포함돼요. 이 정책을 켜는 것은 각 PowerShell 세션에서 Start-Transcript cmdlet을 호출하는 것과 같은 효과가 있어요.
비활성화하면 PowerShell 기반 애플리케이션은 기본적으로 트랜스크립트 로그를 쓰지 않아요. 다만 Start-Transcript cmdlet으로는 여전히 트랜스크립션 로깅을 켤 수 있어요. 트랜스크립트 로깅의 OutputDirectory를 공유 위치로 설정할 때는 해당 디렉터리에 대한 접근 권한을 제한해서, 다른 사용자나 컴퓨터의 트랜스크립트를 다른 사람이 열어보지 못하게 해야 해요.
Set the default source path for Update-Help
이 정책은 Update-Help cmdlet의 SourcePath 매개 변수에 기본값을 설정해 줘요. 이 설정 덕분에 사용자가 인터넷에서 도움말 파일을 다운로드하지 못하게 막을 수 있어요.
참고: 이 그룹 정책 설정은 컴퓨터 구성(Computer Configuration)과 사용자 구성(User Configuration) 아래에 모두 표시되지만, 실제로 적용되는 건 컴퓨터 구성 아래의 설정뿐이에요. 사용자 구성 아래의 설정은 무시돼요.
Update-Help cmdlet은 PowerShell 모듈의 최신 도움말 파일을 다운로드해서 컴퓨터에 설치해요. 기본적으로 모듈이 지정한 인터넷 위치에서 새 도움말 파일을 받아요. 그런데 Save-Help cmdlet으로 최신 도움말 파일을 네트워크 공유 같은 파일 시스템 위치에 내려받아 둔 다음, Update-Help cmdlet이 그 파일 시스템 위치에서 도움말을 가져와 설치하게 할 수도 있어요. Update-Help cmdlet의 SourcePath 매개 변수가 바로 이 파일 시스템 위치를 지정해요.
SourcePath 매개 변수에 기본값을 제공하면 이 그룹 정책 설정이 모든 Update-Help 명령에 SourcePath 매개 변수를 암묵적으로 추가해요. 사용자는 기본값으로 지정된 파일 시스템 위치를 다른 위치로 바꿔 덮어쓸 수는 있지만, Update-Help 명령에서 SourcePath 매개 변수를 제거할 수는 없어요.
이 정책을 사용하도록 설정하면 SourcePath 매개 변수의 기본값을 지정할 수 있어요. 파일 시스템 위치를 입력하면 되죠. 비활성화하거나 구성하지 않으면 Update-Help cmdlet의 SourcePath 매개 변수에 기본값이 없어요. 사용자는 인터넷이나 어떤 파일 시스템 위치에서든 도움말을 내려받을 수 있어요. 자세한 내용은 about_Updatable_Help 문서를 참고하세요.