레지스트리 값 가져오기 위한 PowerShell: 튜토리얼 안내

이 문서에서는 PowerShell을 사용하여 레지스트리 값을 가져오고 다양한 방법으로 레지스트리 항목을 쿼리하는 방법을 배웁니다.

시작해 봅시다!

사전 요구 사항

이 문서의 모든 예제는 PowerShell 7.1을 사용하여 설명되며, 이는 이 문서가 작성된 시점에서 가장 최신 버전입니다. Windows PowerShell 5.1을 선택할 수도 있습니다. 또한 PowerShell 드라이브에 대한 기본적인 이해도가 있어야 합니다. PowerShell 드라이브

일부 예제는 관리자 권한 없이 작동하지 않을 수도 있습니다.

Get-ChildItem을 사용하여 레지스트리 키 및 값을 가져오는 방법

레지스트리 키 및 값을 찾는 가장 쉬운 방법 중 하나는 Get-ChildItem cmdlet을 사용하는 것입니다. 이는 PowerShell 드라이브의 항목을 열거하여 PowerShell을 사용하여 레지스트리 값을 가져오고 더 많은 작업을 수행합니다. 이 경우 해당 PowerShell 드라이브는 Get-PSDrive를 실행하여 찾은 HKLM 드라이브입니다.

PowerShell 콘솔에서 다음 명령을 실행합니다.

Get-ChildItem -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\'

아래 스크린샷에서는 다음을 볼 수 있습니다:

  1. WindowsUpdate 레지스트리 키의 전체 경로
  2. 키 AU
  3. AU 키의 레지스트리 항목 목록과 해당 값
Getting registry values for Windows Update

위의 스크린샷에 대해 간단히 언급하자면, 출력이 약간 잘못된 정보를 제공하는 것을 알 수 있습니다. 일반적으로 PowerShell 콘솔 출력은 개체의 속성을 나타냅니다. 하지만 이 경우에는 Get-ChildItem이 다르게 동작합니다. 이 개체는 기술적으로 속성이 없기 때문에 보여지는 디스플레이 포맷을 생성하기 위해 추가 명령이 백그라운드에서 실행됩니다.

관련: Windows 레지스트리에서 대기중인 재부팅 확인하는 방법

Get-ItemProperty를 사용하여 레지스트리 값 가져오기

이전과 동일한 레지스트리 키를 사용하여 이번에는 Get-ItemProperty cmdlet을 사용하고 출력을 더 읽기 쉽게 만들어 봅시다.

Get-ItemProperty를 사용하면 레지스트리 내의 키와 그 값들을 얻는데 가장 적합합니다. 아래 명령을 실행하세요:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU'

아래 스크린샷에서 키와 값의 목록을 확인할 수 있습니다:

  1. 레지스트리 컨테이너 AU에 대한
  2. PowerShell 관련 속성들은 모두 PS로 시작합니다.
Using Get-ItemProperty in PowerShell to get registry values

대안으로, .NET을 사용하여 동일한 출력을 조금 더 빠르게 얻기 위해 레지스트리 항목 경로를 지정할 수도 있습니다. 아래 명령은 PowerShell에서 .NET 레지스트리 클래스를 사용하여 레지스트리 값을 가져오는 예시입니다:

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU

Get-ItemPropertyValue을 사용하여 레지스트리 값 가져오기

이제 키 값을 살펴보겠습니다. 이전과 동일한 레지스트리 컨테이너를 사용하여 Get-ItemPropertyValue cmdlet을 사용하여 NoAutoUpdate 키의 값을 살펴봅시다. 다음의 PowerShell 명령을 실행하세요:

Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\' -Name NoAutoUpdate

Get-ItemPropertyValue을 사용하면 이전에 보았던 다른 정보와 함께 값만 더 간결하게 표시됩니다.

NoAutoUpdate key and the corresponding value

PS Drives 없이 레지스트리 쿼리

이 튜토리얼에서는 레지스트리 작업을 위해 PowerShell 드라이브를 사용해왔습니다. 이 방법만 있는 것은 아닙니다. .NET을 활용하여 .NET 클래스를 통해 레지스트리 정보를 가져올 수도 있습니다!

예를 들어, 원격 컴퓨터에서 HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\ : AutoUpate 레지스트리 값에 대한 PowerShell 레지스트리 값을 가져와야 할 수도 있습니다.

.NET을 사용하여 다음과 같이 수행할 수 있습니다:

  1. 원격 컴퓨터에서 레지스트리 연결을 엽니다.
$Registry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computername)

2. 찾고자 하는 특정 레지스트리 키를 엽니다.

$RegistryKey = $Registry.OpenSubKey("SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", $true)

3. 레지스트리 키 내의 레지스트리 값을 쿼리하기 위해 GetValue() 메서드를 사용합니다.

$RegistryKey.GetValue('AU')

.NET을 사용하는 것은 PowerShell 드라이브보다 약간 더 빠르며 PowerShell을 사용하여 원격 컴퓨터의 레지스트리 키와 값을 쿼리하는 쉬운 방법입니다.

Test-Path를 사용하여 레지스트리 값 검사

때로는 레지스트리 값이 있는지 확인해야 할 수 있습니다. 이를 위해 Test-Path cmdlet을 사용합니다.

WindowsUpdate 컨테이너에 대해 이어서 진행하며, 다음 PowerShell 명령을 실행하여 AU 컨테이너가 있는지 확인합니다:

Test-Path -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU'

결과가 True이면 키 또는 컨테이너가 존재합니다. 그러나 값 또는 항목의 존재 여부를 테스트해야하는 경우 어떻게 해야 할까요? 이를 위해 사용자 정의 함수를 만들어 봅시다:

Function Test-RegistryValue ($regkey, $name) {
     if (Get-ItemProperty -Path $regkey -Name $name -ErrorAction Ignore) {
         $true
     } else {
         $false
     }
 }

사용자 정의 함수를 사용하여 경로와 키 또는 컨테이너의 이름, 그리고 찾고 있는 값을 입력하면, 사용자 정의 함수는 아래 스크린샷과 같이 True 또는 False (3)를 반환합니다:

Enter a key and value to test and return True or False

다음 단계

Get-ChildItem, Get-ItemProperty, 및 Get-ItemPropertyValue을 PowerShell에서 사용하여 레지스트리 값을 및 키를 가져올 수 있다는 것을 알고 있습니다. 또한 무엇을 할 수 있을까요?

PowerShell을 사용하여 레지스트리 작업에 대해 자세히 알아보려면, Microsoft Docs에서 제공하는 “레지스트리 키 작업”이라는 문서를 확인하십시오. 그리고 ATA 블로그 게시물 “모든 사용자 하이브에 레지스트리 값을 설정하는 방법: Active Setup 사용하기“에서 레지스트리 값 설정에 대한 훌륭한 데모를 찾을 수 있습니다.

Source:
https://adamtheautomator.com/powershell-to-get-a-registry-value/