PowerShell 레지스트리 키 생성: 관리자를 위한 완벽한 가이드
Aug 25, 2025
PowerShell은 레지스트리 키와 값을 만들고, 편집하고, 삭제하기 위해 regedit와 reg.exe보다 더 안전하고 효율적인 대안을 제공합니다. 다음과 같은 cmdlet은 New-Item, Set-ItemProperty, Remove-Item, 및 Rename-ItemProperty 자동화, 원격 관리, 오류 처리를 가능하게 합니다. 관리자는 레지스트리를 백업하고, 권한을 상승한 상태로 PowerShell을 실행하며, 다음을 사용해야 합니다. Test-Path 그리고 try/catch로 오구성을 방지하세요. 적절한 보호 장치를 갖추면 PowerShell은 로컬과 원격 레지스트리 관리를 모두 간소화합니다.
관리자는 오래 믿고 쓰던 regedit 사용자 인터페이스 또는 reg.exe 유틸리티를 사용해 Windows 레지스트리의 일반적인 모든 작업을 수행할 수 있습니다. 하지만 다른 선택지가 있습니다. 바로 PowerShell입니다. PowerShell은 로컬 컴퓨터에서든 원격에서든 레지스트리 관리 작업을 크게 간소화할 수 있습니다.
이 글에서는 PowerShell을 사용해 레지스트리 키와 해당 값을 생성, 관리, 삭제하는 방법을 자세히 설명하고, 원격 컴퓨터에서 PowerShell로 레지스트리를 관리하는 것과 같은 고급 작업도 함께 다룹니다.
Windows 레지스트리란 무엇인가요?
Windows 레지스트리는 Microsoft Windows 운영 체제와 애플리케이션을 위한 구성 설정 및 기타 중요한 정보를 저장하는 계층형 데이터베이스입니다. 예를 들어 프로그램을 설치하면 레지스트리 안에 새 하위 키와 값을 생성하여 해당 프로그램의 설정과 상태를 저장할 수 있으며, Windows와 더 깊게 통합하기 위해 기존 항목을 수정하기도 합니다.
커널, 장치 드라이버, 서비스 및 Security Accounts Manager는 모두 레지스트리를 사용할 수 있습니다. 데스크톱 설정, 파일 연결, 애플리케이션 기본 설정과 같은 사용자별 설정은 Windows 컴퓨터의 각 사용자 계정에 대해 개인화된 환경을 제공하기 위해 레지스트리에 저장됩니다. 또한 레지스트리는 시스템 성능을 프로파일링하기 위한 카운터에 접근할 수 있게 해줍니다.
레지스트리 구조
Windows 레지스트리는 루트 키, 하위 키, 값으로 구성된 계층적 구조를 가지고 있습니다.
루트 키(하이브)
루트 키는 모든 하위 키와 값이 속하는 큰 범주입니다. 여기에는 다음이 포함됩니다:
- HKEY_CLASSES_ROOT (HKCR) — 파일 연결 및 OLE 개체 클래스 ID와 같은 등록된 애플리케이션에 대한 정보를 포함합니다.
- HKEY_CURRENT_USER (HKCU) — 현재 로그인한 사용자에 대해 고유한 설정(예: 데스크톱 환경 설정 및 애플리케이션 설정)을 저장합니다.
- HKEY_LOCAL_MACHINE (HKLM) — 모든 사용자에 대해 컴퓨터에만 해당하는 구성 정보를 보관합니다. 여기에는 시스템 하드웨어 설정, 설치된 소프트웨어 설정, 보안 정책이 포함됩니다.
- HKEY_USERS (HKU) — 컴퓨터에 현재 로드되어 있는 모든 사용자 프로필을 포함합니다. HKCU는 실제로 HKU의 하위 키로, 현재 로그인한 사용자에 해당하는 정보를 가리킵니다.
- HKEY_CURRENT_CONFIG (HKCC) — 현재 하드웨어 프로파일의 설정에 연결되며, 자주 액세스되는 시스템 장치와 설정을 자세히 설명합니다.
하위 키
각 루트 키에는 여러 하위 키가 포함되며, 그 하위 키에는 다시 더 많은 하위 키가 포함될 수 있어, 나무 모양의 구조를 이룹니다. 하위 키는 파일 시스템의 폴더와 유사하게 동작하여 관련 설정을 그룹으로 정리합니다.
각 하위 키에는 연결된 type 이(가) values (데이터) 가 할당될 수 있는지를 결정합니다. 사용 가능한 유형에는 REG_SZ(문자열), REG_BINARY(바이너리 값) 및 REG_DWORD(32비트 숫자)가 있습니다.
주의: 변경을 수행하기 전에 레지스트리를 백업하세요
Windows 레지스트리에는 운영 체제와 애플리케이션이 실행하는 데 필수적인 구성과 설정이 포함되어 있습니다. 잘못된 수정은 시스템 불안정 또는 애플리케이션 오류로 이어질 수 있으며, 경우에 따라 Windows가 시작되지 못하게 만들 수도 있습니다.
따라서 PowerShell이나 다른 어떤 도구로든 레지스트리를 편집하기 전에 백업 또는 시스템 복원 지점을 만드세요. 이러한 안전망을 통해 문제가 발생했을 때 시스템을 이전 상태로 복원할 수 있습니다. 레지스트리를 백업하고 복원하는 단계는 이 가이드의 뒷부분에 제공됩니다.
PowerShell과 Windows 레지스트리
PowerShell은 Windows 레지스트리를 관리하기 위한 강력한 cmdlet 세트를 제공하며, Regedit과 같은 전통적인 방법에 비해 더 세밀하고 강력한 접근 방식을 제공합니다. PowerShell을 사용하여 레지스트리 키와 값을 생성할 수도 있고, 수정 및 삭제도 할 수 있습니다. PowerShell로 레지스트리를 관리하는 것은 시스템 구성을 관리하거나 여러 대의 컴퓨터에 변경 사항을 효율적으로 적용해야 하는 시스템 관리자와 파워 유저에게 특히 유용합니다.
PowerShell의 장점
PowerShell은 시스템 관리, 구성 관리, 작업 자동화를 더 쉽게 하기 위해 Microsoft가 개발한 스크립팅 언어입니다. PowerShell은 .NET 프레임워크 기반으로 구축되어 있어 객체 및 .NET 함수와 함께 작동할 수 있습니다. PowerShell의 주요 장점은 다음과 같습니다:
- 자동화 및 스크립팅— PowerShell은 스크립트를 통해 반복 작업을 자동화할 수 있어, 수많은 시스템을 효율적으로 관리하려는 시스템 관리자에게 강력한 도구가 됩니다.
- 포괄적인 cmdlet 컬렉션 — PowerShell은 파일 작업부터 레지스트리 및 프로세스 관리에 이르기까지 일반적인 시스템 관리 작업을 수행하기 위한 방대한 사전 정의 cmdlet 모음을 제공합니다.
- 파이프라인 지원 — 사용자는 한 명령의 출력을 다른 명령의 입력으로 전달할 수 있어, 최소한의 코드로도 복잡한 작업을 수행할 수 있습니다.
- 폭넓은 기능 — PowerShell 스크립팅 언어는 변수, 반복문, 조건뿐 아니라 오류 처리와 병렬 처리 같은 고급 기능도 지원합니다.
- 로컬 및 원격 관리 — PowerShell은 Windows Management Instrumentation (WMI)과 COM (Component Object Model) 객체에 접근할 수 있어, 로컬 및 원격 시스템 모두에서 다양한 관리 작업을 수행할 수 있도록 지원합니다
- 확장 가능한 인터페이스 — 사용자는 물론 제3자 벤더도 사용자 지정 cmdlet, 모듈, 함수, 스크립트를 개발해 PowerShell의 기능을 확장할 수 있습니다.
레지스트리 관리에서 PowerShell 공급자의 역할
PowerShell 공급자(Provider)를 사용하면 사용자가 Windows 레지스트리와 다른 데이터 저장소(예: 파일 시스템 및 인증서 저장소)를 일관된 방식으로 액세스하고 관리할 수 있습니다. 또한 표준 PowerShell 명령을 사용해 서로 다른 형식으로 저장된 데이터를 일관된 방식으로 액세스할 수 있게 해 줍니다.
공급자를 사용하면 파일 시스템에서 디렉터리와 파일을 탐색하는 방식과 유사하게, 레지스트리의 계층적 구조를 탐색할 수 있습니다. 레지스트리 키를 폴더처럼 드나들 수 있으므로, 레지스트리 설정을 직관적으로 살펴보고 관리하기가 쉽습니다.
PowerShell 레지스트리 관리를 위한 Cmdlet
PowerShell은 Windows 레지스트리를 관리하도록 설계된 여러 cmdlet 세트를 제공합니다. 예를 들어 PowerShell에서 New-Item cmdlet을 사용해 레지스트리 키를 만들 수 있습니다. 다음은 레지스트리 관리를 위해 사용되는 주요 cmdlet 중 일부에 대한 개요입니다:
- Get-Item — 지정된 위치의 레지스트리 키를 검색합니다
- Set-Item — 레지스트리 키의 값을 수정합니다
- New-Item — PowerShell로 레지스트리 키를 추가합니다
- Remove-Item — 레지스트리 키와 해당 값들을 삭제합니다
- Get-ItemProperty — 레지스트리 키의 속성(값)을 검색합니다
- Remove-ItemProperty — 레지스트리 키에서 값을 삭제합니다
- Set-ItemProperty — 레지스트리 키의 값을 변경합니다
- Get-ChildItem — 레지스트리 키의 하위 키와 값을 나열합니다
레지스트리 관리를 위한 PowerShell 설정
관리자 권한으로 PowerShell 실행
대부분의 경우 레지스트리를 수정하려면 상승된 권한이 필요하므로 PowerShell을 상승된 모드(관리자 권한 모드)로 실행해야 합니다. 이는 “running as administrator(관리자 권한으로 실행)”이라고도 합니다. 예를 들어 시스템 파일, 컴퓨터의 모든 사용자에게 영향을 주는 레지스트리 설정 또는 구성 변경에는 관리자 권한이 필요하며, 방화벽 규칙 설정이나 IP 주소 구성 같은 네트워크 구성 작업도 마찬가지입니다. 또한 스크립트를 실행하도록 실행 정책을 변경하거나 Windows 시스템에 소프트웨어를 설치, 업데이트 또는 제거하려면 관리자 권한이 종종 필요합니다.
관리자 권한 모드에서 PowerShell을 열려면 아래 단계를 따르세요. 사용자 계정 컨트롤(User Account Control, UAC) 창이 표시되면 예를 클릭하여 계속합니다.
Windows 10 및 Windows 11
- 시작 메뉴(Windows 아이콘)를 클릭한 다음 검색창에 PowerShell 를 입력합니다.
- 검색 결과에서 Windows PowerShell 또는 Windows Terminal (설정에 따라 다름)를 마우스 오른쪽 버튼으로 클릭하세요.
- 바로 가기 메뉴에서 관리자 권한으로 실행 을 선택합니다.
Windows Server
- 시작 메뉴를 열고 Start Menu로 이동한 다음 Windows PowerShell 또는 Windows Terminal을(를) 프로그램 목록에서 찾으세요.
- 에서 Windows PowerShell 또는 Windows Terminal을(를) 마우스 오른쪽 버튼으로 클릭하세요.
- Run as administrator를 선택하세요.
프로바이더 및 드라이브 정보 확인
현재 PowerShell 세션에서 사용할 수 있는 공급자(프로바이더)와 드라이브에 대한 정보를 가져오려면 Get-PSProvider 및 Get-PSDrive cmdlet을 사용할 수 있습니다.
사용 가능한 공급자 정보 가져오기 (Get-PSProvider)
지원하는 기능과 연결된 드라이브에 대한 자세한 내용까지 포함하여, 사용할 수 있는 PowerShell 공급자(프로바이더) 정보를 가져오려면 다음 cmdlet을 사용하십시오:
Get-PSProvider
사용 가능한 드라이브 정보 가져오기 (Get-PSDrive)
PowerShell의 드라이브는 파일 시스템, 레지스트리 키, 인증서, 환경 변수 등 서로 다른 데이터 저장소에 대한 논리적 표현입니다. 현재 PowerShell 세션에서 사용할 수 있는 드라이브에 대한 정보를 가져오려면 다음을 사용합니다: Get-PSDrive cmdlet. 파일시스템 드라이브처럼 저장소를 나타내는 드라이브의 경우, 사용 중인 공간과 사용 가능한(여유) 공간도 함께 표시됩니다.
Get-PSDrive
PowerShell을 사용하여 레지스트리 키 만들기, 관리 및 편집
새 레지스트리 키 만들기 (New-Item)
PowerShell에서 New Item cmdlet을 사용하여 레지스트리 키를 만들 수 있습니다:
New-Item -Path "HKCU:\Software\MyNewApplication"
PowerShell을 사용하여 레지스트리 키를 생성한 후에는 Get-Item: 를 사용하여 작업이 성공했는지 확인할 수 있습니다
Get-Item -Path "HKCU:\Software\MyNewApplication"
레지스트리 키가 존재하는지 확인하기 (Test-Path)
오류와 원치 않는 결과를 방지하려면, 해당 항목에 영향을 주는 명령을 실행하기 전에 Test-Path 를 실행하여 레지스트리 키, 파일 및 기타 항목의 존재 여부를 확인하는 것이 모범 사례입니다. 다음은 간단한 예입니다:
Test-Path -Path "HKCU:\Software\MyNewApplication"
그리고 다음은 더 자세한 출력을 제공하는 좀 더 복잡한 스크립트입니다:
# Check if HKCU\Software\MyNewApplication exists
if (Test-Path -Path “HKCU:\Software\MyNewApplication”) {
Write-Output "Registry key 'HKCU:\Software\MyNewApplication' exists."
} else {
Write-Output "Registry key 'HKCU:\Software\MyNewApplication' does not exist."
}
일반적인 오류 처리
PowerShell을 사용해 Windows 레지스트리를 관리하다 보면 오류가 발생할 수 있습니다. 다음은 가장 흔한 문제들과 해결 방법입니다:
- 액세스가 거부됨 — 이 오류는 필요한 권한 없이 레지스트리를 수정하려고 했을 때 자주 발생합니다. 관리자 권한이 필요한 작업을 수행할 때는 PowerShell을 마우스 오른쪽 버튼으로 클릭한 다음 관리자 권한으로 실행를 선택하십시오.
- 잘못된 경로 — 오타나 잘못된 경로 지정은 오류로 이어질 수 있습니다. 액세스하거나 수정하려는 레지스트리 경로를 항상 다시 확인하세요. 레지스트리 경로는 대소문자를 구분합니다.
- Cmdlet을 인식할 수 없음 — 이 오류는 레지스트리 관리 cmdlet을 지원하지 않는 오래된 버전의 PowerShell을 사용하고 있다는 신호일 수 있습니다. 시스템에서 사용 가능한 최신 버전으로 PowerShell을 업데이트하세요.
- 스크립트 실행이 비활성화됨 — 보안 설정 때문에 PowerShell이 스크립트 실행을 차단하도록 구성되었을 수 있습니다. 이를 변경하려면 다음을 실행할 수 있습니다: Set-ExecutionPolicy RemoteSigned (또는 보안 요구 사항에 맞는 다른 정책 수준을 지정하세요). 실행 정책을 변경하면 시스템이 위험에 노출될 수 있으므로 주의하십시오.
- 데이터 유형 오류 — 레지스트리 키를 생성하거나 수정할 때 올바른 데이터 유형을 사용하세요.
- 항목이 존재하지 않음 — 존재하지 않는 레지스트리 키 또는 값을 액세스하거나 수정하려고 하면 오류가 발생합니다. 작업을 시도하기 전에 Test-Path 를 사용해 레지스트리 경로가 존재하는지 확인하세요.
- 와일드카드의 부적절한 사용 — 일부 시나리오에서 와일드카드는 유용할 수 있지만, 잘못 사용하면 광범위하고 의도치 않은 변경이나 오류가 발생할 수 있습니다. 와일드카드를 신중하게 사용하고 -WhatIf 매개변수를 사용해 실행 전에 변경 내용을 미리 확인하는 것이 좋습니다.
PowerShell을 사용하여 레지스트리 키와 값 추가 및 업데이트
새 키 및 값 추가 (New-ItemProperty)
PowerShell을 사용하여 레지스트리 키를 추가하고 값을 할당할 수 있으며, New ItemProperty cmdlet을 사용합니다. 기본 구문은 다음과 같습니다:
New-ItemProperty -Path "HKCU:\Software\MyNewApplication" -Name "Setting_Name" -Value "Setting_Value" -PropertyType "String"
예를 들어, 다음 명령은 NewString 이라는 새 레지스트리 키를 만들고 값 Hello 를 할당합니다:
New-ItemProperty -Path "HKCU:\Software\MyNewApplication" -Name "NewString" -PropertyType String -Value "Hello"
마찬가지로 값 NewDWORD 를 갖는 하위 키를 생성하려면 다음 cmdlet을 사용하면 됩니다:1234 , you would use this cmdlet:
New-ItemProperty -Path "HKCU:\Software\MyNewApplication" -Name "NewDWORD" -PropertyType DWord -Value 1234
레지스트리 값 업데이트 (Set-ItemProperty)
PowerShell에서 레지스트리 키를 편집하려면 Set-ItemProperty cmdlet을 사용합니다:
PowerShell을 사용해 레지스트리 값을 설정하는 방법은 다음과 같습니다:
Set-ItemProperty -Path "HKCU:\Software\MyApplication" -Name "Setting_Name" -Value "New_Value"
PowerShell을 사용해 레지스트리 값을 변경할 수도 있습니다. 예를 들어, 레지스트리에 저장된 애플리케이션 설정의 값을 업데이트하려면 다음과 같은 명령을 사용할 수 있습니다:
Set-ItemProperty -Path "HKCU:\Software\MyNewApplication" -Name "NewString" -Value "Hello World"
Set-ItemProperty 는 PowerShell에서 레지스트리 편집 작업을 수행하는 데 효과적인 방법이지만, 해당 cmdlet은 어떠한 출력도 생성하지 않습니다. 변경 사항을 확인하려면 Get-Item:
Get-Item -Path "HKCU:\Software\MyNewApplication"
또는 레지스트리 편집기에서 변경 사항을 확인할 수도 있습니다:
다른 예를 살펴보겠습니다. 하위 키 이름이 NewDWORD인 값(하위 키의 값을) 을 5678로 변경하려면 다음 cmdlet을 사용합니다:
Set-ItemProperty -Path "HKCU:\Software\MyNewApplication" -Name "NewDWORD" -Value 5678
변경 사항을 확인하려면 다음 Get-Item cmdlet을 사용하세요:
Get-Item -Path "HKCU:\Software\MyNewApplication"
레지스트리 값 삭제 (Remove-ItemProperty)
레지스트리 값을 삭제하려면 다음의 Remove-ItemProperty cmdlet을 사용할 수 있습니다:
Remove-ItemProperty -Path "HKCU:dummyNetwrixKey" -Name "NetwrixParam"
레지스트리 키 삭제 (Remove-Item)
레지스트리 키를 삭제하려면 다음과 같이 Remove-Item 를 사용합니다 . –Recurse 매개 변수를 사용하면 추가 확인 없이 모든 하위 키가 삭제됩니다.
Remove-Item -Path "HKCU:dummyNetwrixKey" -Recurse
지정한 키 자체는 삭제하지 않고 그 안의 모든 하위 키를 삭제하려면 경로 끝에 * 기호를 추가합니다:
Remove-Item -Path "HKCU:dummyNetwrixKey*" -Recurse
레지스트리 값 이름 바꾸기 (Rename ItemProperty)
레지스트리 키의 값을 이름 바꾸려면 Rename ItemProperty cmdlet을 사용합니다:
Rename-ItemProperty -Path "HKCU:dummyNetwrixKey" -Name "NetwrixParam" -NewName "NetwrixNewParam"
레지스트리 키 이름 바꾸기 (Rename-Item)
레지스트리 키의 이름을 바꾸려면 Rename-Item cmdlet을 사용합니다:
Rename-Item -Path "HKCU:dummyNetwrixKey" NetwrixNewKey
PowerShell을 사용한 고급 레지스트리 작업
고급 레지스트리 작업에는 PowerShell App Deployment Toolkit을 사용하고 PowerShell로 원격 레지스트리 관리를 수행하는 것이 포함됩니다.
PowerShell App Deployment Toolkit(PSADT) 사용
PSADT는 애플리케이션을 배포하고 관리하기 위한 스크립트와 도구의 모음입니다. 특정 구성이나 사용자 상호작용이 필요한 복잡한 또는 맞춤형 애플리케이션을 배포하는 데 흔히 사용됩니다. 또한 배포 스크립트를 수정하여 새로운 버전이나 변경 사항을 수용함으로써 애플리케이션을 업데이트하거나 패치하는 데에도 사용할 수 있습니다. 조직에서는 배포 과정에서 사용자에게 유익한 메시지, 프롬프트 및 피드백을 제공하기 위해 PSADT를 사용하여 사용자의 인지와 협조를 높이기도 합니다.
주요 기능과 이점은 다음과 같습니다:
- 배포 스크립트 — 이 스크립트를 사용하면 애플리케이션의 설치 프로세스를 정의하고 사용자 지정할 수 있습니다. 필수 조건 확인, 소프트웨어 설치, 설정 구성, 설치 후 정리 같은 작업을 처리할 수 있습니다.
- 사용자 지정 가능한 사용자 인터페이스 — 배포 중에 사용자에게 안내 메시지, 알림, 진행률 표시줄을 표시하면 피드백을 제공하고 사용자 상호작용을 관리하는 데 도움이 됩니다.
- 로깅 기능 — 배포 활동과 오류를 수집하는 것은 문제 해결과 감사를 위한 데 필수입니다.
- 설치 전 및 설치 후 작업 — 설치 전에 시스템을 준비하기 위한 작업을 정의하고, 이후에는 추가 구성 또는 정리 작업을 수행할 수 있습니다.
- 애플리케이션을 위한 구성 설정 — 배포 중에 동적으로 적용될 설정을 정의할 수 있습니다. 이를 통해 배포 프로세스를 서로 다른 환경이나 요구 사항에 맞게 조정하는 데 도움이 됩니다.
- 무인(조용한) 애플리케이션 설치 — 필요에 따라 사용자 상호작용 없이 배포를 실행할 수 있습니다.
원격 레지스트리 관리(Enter-PSSession 및 Invoke-Command)
관리자는 PowerShell을 사용해 네트워크 내의 원격 컴퓨터에 있는 레지스트리에 접근하고, 탐색하고, 수정할 수 있습니다. PowerShell로 원격 레지스트리를 편집할 때는 잘못된 수정으로 인해 시스템 불안정이나 보안 취약점이 발생할 수 있으므로 주의해야 합니다. 또한 필요한 관리 권한이 있는지, 그리고 방화벽 및 네트워크 설정이 원격 액세스를 허용하는지 확인하세요.
원격 레지스트리 관리를 위해 주로 사용되는 PowerShell 명령은 다음과 같습니다.
- Enter-PSSession 는 단일 원격 컴퓨터와 상호작용(인터랙티브) 세션을 설정하는 데 사용되며, Exit-PSSession 는 세션을 종료하는 데 사용됩니다.
- Invoke-Command 는 하나 이상의 원격 컴퓨터에 단일 명령 또는 스크립트 블록을 전송하는 데 사용됩니다. 예를 들어, 여러 시스템에 걸쳐 동일한 레지스트리 변경을 효율적으로 적용할 수 있습니다.
Enter-PSSession 및 Exit-PSSession
Enter-PSSession 는 단일 원격 컴퓨터와 상호작용하는 세션을 시작하는 데 사용됩니다. 일련의 명령을 대화형으로 실행해야 하는 상황에서 특히 유용합니다. 세션에 들어가면 원격 시스템에 직접 로그인한 것처럼 레지스트리 작업을 수행할 수 있습니다. 다음은 수행할 단계입니다:
를 사용하기 전에 Enter-PSSession, 이 명령을 사용해 원격 컴퓨터에서 PowerShell Remoting 이 활성화되어 있는지 확인하세요:
Enable-PSRemoting
대화형 세션을 시작하려면 이 cmdlet을 실행하세요:
Enter-PSSession -ComputerName Windows11 -Credential Get-Credential
연결되어 있는지 확인하려면 프롬프트 앞에 원격 컴퓨터 이름이 표시되는지 확인하세요:
연결이 되면 표준 PowerShell cmdlet을 사용해 레지스트리를 대화형으로 관리할 수 있습니다. 예를 들어, 다음 cmdlet을 실행하면 원격 컴퓨터에서 레지스트리 값을 가져올 수 있습니다:
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\BitLocker"
원격 세션을 종료하고 로컬 PowerShell 프롬프트로 돌아가려면 Exit-PSSession cmdlet을 사용합니다.
Invoke-Command
Invoke-Command를 사용하면 하나 이상의 원격 컴퓨터에서 명령을 실행할 수 있습니다. 대화형이 필요 없는 작업을 수행하거나 스크립트에서 명령을 실행해야 할 때 유용합니다. 예를 들어, 원격 컴퓨터에서 레지스트리 값을 가져오려면 다음 명령을 사용할 수 있습니다:
Invoke-Command -ComputerName Windows11 -Credential Get-Credential -ScriptBlock {
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\BitLocker"
}
You can specify multiple computers as follows:
-ComputerName 'Computer1', 'Computer2'
를 실행하면 Invoke-Command 원격 컴퓨터에 대한 자격 증명을 입력하라는 메시지가 표시됩니다:
유효한 자격 증명을 입력한 다음 OK 를 클릭하면 실행한 스크립트의 출력 결과를 확인할 수 있습니다:
원격 레지스트리 관리를 위한 보안 고려 사항
PowerShell로 레지스트리를 원격에서 편집할 때는 다음 보안 모범 사례를 반드시 따르세요:
- 안전한 인증 방법을 사용하세요.
- 를 사용하여 모든 통신이 암호화되도록 하세요. -UseSSL 매개 변수를 Enter-PSSession 또는 Invoke-Command와 함께 사용하세요.
- PowerShell 원격 기능을 신중하게 활성화하고, 신뢰할 수 있는 호스트와 네트워크로의 액세스를 제한하세요.
- 원격 액세스를 위해 PowerShell을 사용하는 사용자와 프로세스에 최소한으로 필요한 권한만 부여하세요.
- 승인되지 않은 스크립트가 실행되지 않도록 제한적인 실행 정책을 설정하세요.
- Just Enough Administration (JEA)를 사용해 액세스를 제한하세요. JEA는 PowerShell로 관리할 수 있는 항목이라면 무엇이든 위임 관리할 수 있게 해주는 보안 기술입니다.
- 방화벽 규칙을 구성하여 PowerShell 원격(리모팅) 포트에 대한 액세스를 제한하세요(기본값: HTTP의 경우 5985, HTTPS의 경우 5986).
레지스트리 관리를 위한 모범 사례
PowerShell을 사용하여 Windows 레지스트리를 효과적이고 안전하게 관리하려면 다음을 확인하세요:
- 레지스트리 구조를 이해하세요. 특히 HKEY_LOCAL_MACHINE 및 HKEY_CURRENT_USER 하이브와 해당 하위 키를 포함해 레지스트리 구조에 익숙해지세요.
- 변경하기 전에 레지스트리를 백업하세요. 어떤 변경을 수행하든, 특히 대량 수정 또는 시스템 안정성에 영향을 줄 수 있는 변경을 하는 경우에는 항상 레지스트리를 백업하세요. 백업 및 복구 지침은 다음 섹션에 제공됩니다.
- 관리자 권한으로 실행하세요. 레지스트리의 많은 변경 작업에는 관리자 권한이 필요합니다. 오류를 방지하려면 상승된 권한으로 PowerShell을 실행하고 있는지 확인하세요.
- 주의하세요. 레지스트리는 시스템 운영에서 매우 중요한 역할을 하므로, 특히 키나 값(value)을 삭제할 때는 조작에 각별히 주의하세요.
- 중요한 키를 직접 편집하지 마세요. 레지스트리를 잘못 변경하면, 특히 HKEY_LOCAL_MACHINE\System 같은 중요 키는 시스템 불안정 또는 장애로 이어질 수 있습니다.
- 오류 처리(에러 핸들링)를 사용하세요. 코드 주변에 try/catch 블록을 구현해 예외를 처리하세요. 특히 레지스트리 항목이 존재하지 않을 수 있는 경우에 유용합니다.
- 경로를 하드코딩하지 마세요. 가능하면 변수와 내장 PowerShell 명령을 사용해 경로를 동적으로 해석(해결)하세요. 이렇게 하면 스크립트의 이식성과 가독성이 향상됩니다.
- 안전한 환경에서 테스트하세요. 운영 중인 시스템에 변경 사항을 적용하기 전에 대상 환경과 유사한 가상 머신 같은 통제된 환경에서 스크립트를 테스트하세요. 테스트 환경에서 문제를 식별하고 완화하면 운영(프로덕션) 시스템의 안정성을 보호하는 데 도움이 됩니다.
- 변경 사항을 문서화하세요. PowerShell 스크립트를 통해 수행한 모든 레지스트리 변경 사항을 자세히 기록하세요. 문서에는 변경의 목적, 변경 전 원래 상태, 그리고 예상되는 영향이 포함되어야 합니다. 이러한 절차는 문제 해결과 감사에 매우 유용합니다.
- 지원되는 경우 트랜잭션을 사용하세요. 지원되는 cmdlet과 함께 -UseTransaction 스위치를 사용하면, 문제가 발생했을 때 작업을 되돌릴 수 있습니다.
- 사이버 보안 모범 사례를 따르세요. 최소 권한 원칙 을 강제하는 것과 민감한 정보를 하드코딩하지 않는 등의 핵심 보안 모범 사례를 준수하세요.
레지스트리 설정을 백업하고 복원하는 방법
PowerShell 또는 regedit을 사용해 레지스트리 복원 및 백업 설정을 수행할 수 있습니다.
일부 변경 사항은 적용을 위해 재시작이 필요할 수 있습니다.
PowerShell 사용
레지스트리를 백업하려면 관리자로 PowerShell을 열고 다음 명령을 사용하세요:
reg export HKCU\Software\MyNewApplication C:\registry_backup.reg
백업에서 레지스트리를 복원하려면 다음 명령을 사용하세요:
reg import c:\registry_backup.reg
레지스트리 편집기( regedit ) 사용
레지스트리 편집기를 사용하여 레지스트리 하이브를 백업하려면 아래 단계를 따르세요.
- 레지스트리 편집기를 엽니다. 한 가지 방법은 Win + R을 눌러 regedit을 입력한 다음 Enter을 누르는 것입니다. 또 다른 방법은 레지스트리 편집기를 시작 메뉴에서 검색해 열어보는 것입니다.
- 백업하려는 레지스트리 하이브를 마우스 오른쪽 버튼으로 클릭한 다음 내보내기를 선택합니다.
- 백업 파일을 저장할 위치를 선택하고 파일에 의미 있는 이름을 지정한 다음 내보내기 범위가 전체 로 설정되어 있는지 확인합니다.
- 를 클릭하여 저장 내보낸 레지스트리 설정을 포함하는 .reg 파일을 생성합니다.
레지스트리 백업에서 복원하려면 다음 단계를 따르세요:
- 레지스트리 편집기에서 파일 > 가져오기 를 클릭합니다.
- 백업 .reg 파일을 저장한 위치로 이동한 다음 파일을 선택하고 열기 를 클릭합니다.
- 확인 메시지가 나타나면 확인을 클릭하여 레지스트리 편집기로 돌아갑니다.
결론
PowerShell을 사용하면 IT 담당자가 다양한 레지스트리 관리 작업을 간소화할 수 있습니다. 하지만 기억하세요. 단 하나의 부적절한 변경만으로도 운영 체제가 블루 스크린(Blue Screen of Death)으로 이어질 수 있습니다. 따라서 레지스트리를 변경하기 전에, 변경하려는 내용이 무엇인지 100% 확신하고 최신 백업을 보유해야 합니다. 또한 자신이 수행하는 모든 변경 사항을 꼼꼼히 추적해야 합니다. Netwrix Auditor for Windows Server 는 도움이 됩니다. Windows 레지스트리의 변경 사항을 추적하고, 보고하며, 알림을 제공합니다.
자주 묻는 질문(FAQ)
PowerShell을 사용해 레지스트리 키를 추가하여 원격 데스크톱 서비스(Remote Desktop Services, RDS)를 끄려면 어떻게 해야 하나요?
RDS를 비활성화하려면 fDenyTSConnections 값 을 1로 설정합니다. 사용할 명령의 예는 다음과 같습니다.
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections -Value 1
PowerShell로 레지스트리 키를 추가하려고 할 때 ‘Type:’ 프롬프트가 표시되는 이유는 무엇인가요?
Type: 프롬프트는 보통 PowerShell cmdlet을 필수 매개변수 없이 실행했거나 명령에 구문 오류가 있을 때 나타납니다.
PowerShell에서 새 항목을 추가할 때 레지스트리 경로가 존재하지 않는다면 어떻게 해야 하나요?
원하는 경로가 존재하지 않는다면 New-Item cmdlet을 사용하여 생성할 수 있습니다:
New-Item -Path "HKCU:\Software\MyNewApplication"
이 문제를 방지하려면 PowerShell로 새 항목을 추가하기 전에 Test-Path cmdlet을 사용해 액세스하려는 레지스트리 경로가 존재하는지 확인하세요:
Test-Path -Path "HKCU:\Software\MyNewApplication"
PowerShell에서 레지스트리 값을 생성 또는 업데이트하려면, 해당 키가 존재하지 않는 경우 키도 함께 생성되도록 하려면 어떻게 해야 하나요?
다음 스크립트는 Test-Path, New-Item 및 Set-ItemProperty cmdlet을 사용해 지정된 레지스트리 값(registry value)을 설정하거나 업데이트하기 전에 레지스트리 경로가 존재하는지 확인하고, 없으면 먼저 생성합니다:
# Define registry path, key name, and value
$Path = "HKCU:\Software\MyNewApplication"
$propertyName = "Version"
$propertyValue = "829"
# Check if the registry path exists, create if not
if (-Not (Test-Path $Path)) {
Write-Output "Registry path does not exist. Creating it"
New-Item -Path $Path -Force | Out-Null
}
# Set registry value
Set-ItemProperty -Path $Path -Name $propertyName -Value $propertyValue
레지스트리 키와 값을 추가하거나 업데이트하기 위해 ‘reg add’에 해당하는 PowerShell 명령은 무엇인가요?
PowerShell에서 레지스트리 키와 값을 생성하거나 기존 항목을 업데이트하려면 Set-ItemProperty cmdlet을 사용할 수 있습니다:
Set-ItemProperty -Path "HKCU:\Software\MyNewApplication" –Name “Version” -Value “839”
PowerShell에서 New-Item과 함께 -Force를 사용할 때 주의해야 하는 이유는 무엇인가요?
Force 매개변수를 New-Item과 함께 사용하는 것은 기존 항목을 의도치 않게 덮어쓰거나 기타 예기치 않은 영향을 초래할 수 있어 위험할 수 있습니다. New-Item을(를) 사용하기 전에 항목이 존재하는지 확인하는 것이 모범 사례입니다. 특히 -Force를 사용할 때 더욱 그렇습니다.
PowerShell을 사용해 HKCU에서 특정 경로에 레지스트리 키를 추가하려면 어떤 명령을 사용해야 하나요?
PowerShell을 사용해 HKCU(HKEY_CURRENT_USER) 하이브의 특정 경로에 레지스트리 키를 추가하려면 New-Item cmdlet을 여기와 같이 사용할 수 있습니다:
New-Item -Path "HKCU:\Software\MyNewApplication"
무료 Windows 레지스트리 튜토리얼
자세히 알아보기공유하기
더 알아보기
저자 소개
Tyler Reese
제품 관리 부사장, CISSP
소프트웨어 보안 업계에서 20년이 넘는 경력을 쌓아온 Tyler Reese는 오늘날 기업이 직면한 빠르게 변화하는 아이덴티티 및 보안 과제에 대해 깊이 잘 알고 있습니다. 현재 그는 Netwrix Identity and Access Management 포트폴리오의 제품 디렉터로 재직 중이며, 시장 동향을 평가하고 IAM 제품 라인의 방향을 설정하는 일을 포함해 궁극적으로는 엔드 유저의 요구를 충족하는 역할을 담당하고 있습니다. 그의 전문 경력은 Fortune 500 기업을 대상으로 한 IAM 컨설팅부터 대형 D2C(Direct-to-Consumer) 기업의 엔터프라이즈 아키텍트로 일한 경험까지 폭넓게 이어져 있습니다. 그는 현재 CISSP 자격증을 보유하고 있습니다.