다음을 통해 공유


레지스트리 항목 작업

이 샘플은 Windows 플랫폼에만 적용됩니다.

레지스트리 항목은 키의 속성이어서 직접 검색할 수 없으므로 레지스트리 항목으로 작업할 경우 약간 다른 방법으로 접근해야 합니다.

레지스트리 항목 나열

레지스트리 항목을 검사하는 방법에는 여러 가지가 있습니다. 가장 간단한 방법은 키와 연결된 속성 이름을 가져오는 것입니다. 예를 들어 레지스트리 키 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion의 항목 이름을 보려면 Get-Item을 사용합니다. 레지스트리 키에는 키에 있는 레지스트리 항목의 목록인 “Property” 제네릭 이름을 가진 속성이 있습니다. 다음 명령은 Property 속성을 선택하고 목록에 표시되도록 항목을 확장합니다.

Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
    Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

레지스트리 항목을 더 읽기 쉬운 형식으로 보려면 다음을 사용합니다 Get-ItemProperty.

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
ProgramFilesDir          : C:\Program Files
CommonFilesDir           : C:\Program Files\Common Files
ProgramFilesDir (x86)    : C:\Program Files (x86)
CommonFilesDir (x86)     : C:\Program Files (x86)\Common Files
CommonW6432Dir           : C:\Program Files\Common Files
DevicePath               : C:\WINDOWS\inf
MediaPathUnexpanded      : C:\WINDOWS\Media
ProgramFilesPath         : C:\Program Files
ProgramW6432Dir          : C:\Program Files
SM_ConfigureProgramsName : Set Program Access and Defaults
SM_GamesName             : Games
PSPath                   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows\CurrentVersion
PSParentPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows
PSChildName              : CurrentVersion
PSDrive                  : HKLM
PSProvider               : Microsoft.PowerShell.Core\Registry

키에 대한 Windows PowerShell 관련 속성은 모두 PSPath, PSParentPath, PSChildName 및 PSProvider와 같은 "PS" 접두사를 갖습니다.

표기 *.* 법을 사용하여 현재 위치를 참조할 수 있습니다. 먼저 CurrentVersion 레지스트리 컨테이너로 변경하는 데 사용할 Set-Location 수 있습니다.

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

또는 기본 제공 HKLM: PSDrive를 Set-Location과 함께 사용할 수 있습니다.

Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

그런 다음, 현재 위치에 . 표기법을 사용하여 전체 경로를 지정하지 않고 속성을 나열할 수 있습니다.

Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

경로 확장은 파일 시스템에서와 동일하게 작동하므로 이 위치에서 Get-ItemProperty -Path ..\Help를 사용하여 HKLM:\SOFTWARE\Microsoft\Windows\HelpItemProperty 목록을 가져올 수 있습니다.

단일 레지스트리 항목 가져오기

레지스트리 키에서 특정 항목을 검색하려면 여러 가지 방법 중 하나를 사용할 수 있습니다. 이 예제에서는 .에서 DevicePath값을 찾습니다HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Get-ItemProperty를 사용하면서, Path 매개 변수를 사용하여 키의 이름을 지정하고, Name 매개 변수를 사용하여 DevicePath 항목의 이름을 지정합니다.

Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
DevicePath   : C:\WINDOWS\inf
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

이 명령은 DevicePath 속성뿐만 아니라 표준 Windows PowerShell 속성을 반환합니다.

참고 항목

Get-ItemProperty에는 Filter, Include, Exclude 매개 변수가 있지만 속성 이름을 기준으로 필터링하는 데에는 사용할 수 없습니다. 해당 매개 변수를 레지스트리 키(항목 경로)라고 하며 레지스트리 항목(항목 속성)이 아닙니다.

다른 옵션으로 reg.exe 명령줄 도구를 사용합니다. reg.exe의 도움말을 보려면 명령 프롬프트에 reg.exe /?를 입력합니다. DevicePath 항목을 찾으려면 다음 명령에 표시된 대로 reg.exe를 사용합니다.

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

WshShell COM 개체를 사용하여 일부 레지스트리 항목을 찾을 수도 있습니다. 이 방법은 대규모 이진 데이터나 백슬래시(\)와 같은 문자를 포함하는 레지스트리 항목 이름에는 사용할 수 없습니다. \ 구분 기호를 사용하여 속성 이름을 항목 경로에 추가합니다.

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

단일 레지스트리 항목 설정

레지스트리 키의 특정 항목을 변경하려는 경우 몇 가지 가능한 방법 중 하나를 사용할 수 있습니다. 다음은 경로 항목을 수정하는 예제입니다HKEY_CURRENT_USER\Environment. 경로 항목은 실행 파일을 찾을 위치를 지정합니다.

  1. 를 사용하여 Get-ItemProperty경로 항목의 현재 값을 검색합니다.
  2. 새 값을 추가하여 .을(를) 구분 ;합니다.
  3. 레지스트리 항목을 수정하려면 지정된 키, 항목 이름 및 값과 함께 사용합니다 Set-ItemProperty .
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

참고 항목

Set-ItemProperty에는 Filter, Include, Exclude 매개 변수가 있지만 속성 이름을 기준으로 필터링하는 데에는 사용할 수 없습니다. 이러한 매개 변수를 레지스트리 키(항목 경로)라고 하며 레지스트리 항목(항목 속성)이 아닙니다.

또 다른 옵션은 Reg.exe 명령줄 도구를 사용하는 것입니다. reg.exe에 대한 도움말을 보려면 명령 프롬프트에 reg.exe /?를 입력합니다.

다음 예제에서는 위의 예제에 추가된 경로를 제거하여 경로 항목을 변경합니다. Get-ItemPropertyreg query에서 반환된 문자열을 구문 분석할 필요가 없도록 현재 값을 검색하는 데 사용됩니다. SubStringLastIndexOf 메서드는 경로 항목에 추가된 마지막 경로를 검색하는 사용됩니다.

$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.

새 레지스트리 항목 만들기

“PowerShellPath”라는 새 항목을 CurrentVersion 키에 추가하려면 키 경로, 항목 이름, 항목 값과 함께 New-ItemProperty를 사용합니다. 이 예제에서는 Windows PowerShell에 대한 설치 디렉터리의 경로를 저장하는 Windows PowerShell 변수 $PSHome의 값을 사용합니다.

다음 명령을 사용하여 새 항목을 키에 추가할 수 있습니다. 또한 이 명령은 새 항목에 대한 정보를 반환하기도 합니다.

$newItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    PropertyType = 'String'
    Value = $PSHome
}
New-ItemProperty @newItemPropertySplat
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType은 다음 표에서 Microsoft.Win32.RegistryValueKind 열거형 멤버의 이름이어야 합니다.

  • String - REG_SZ 값에 사용됩니다. [System.String] Value 매개 변수에 개체를 전달합니다.
  • ExpandString - REG_EXPAND_SZ 값에 사용됩니다. [System.String] Value 매개 변수에 개체를 전달합니다. 문자열에는 값을 검색할 때 확장되는 환경 변수에 대한 확장되지 않은 참조가 포함되어야 합니다.
  • Binary - REG_BINARY 값에 사용됩니다. [System.Byte[]] Value 매개 변수에 개체를 전달합니다.
  • DWord - REG_DWORD 값에 사용됩니다. [System.Int32] Value 매개 변수에 개체를 전달합니다.
  • MultiString - REG_MULTI_SZ 값에 사용됩니다. [System.String[]] Value 매개 변수에 개체를 전달합니다.
  • QWord - REG_QWORD 값에 사용됩니다. [System.Int64] Value 매개 변수에 개체를 전달합니다.

Path 매개 변수에 대한 값 배열을 지정하여 여러 위치에 레지스트리 항목을 추가할 수 있습니다.

$newItemPropertySplat = @{
    Name = 'PowerShellPath'
    PropertyType = 'String'
    Value = $PSHome
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
           'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat

Force 매개 변수를 명령에 New-ItemProperty 추가하여 기존 레지스트리 항목 값을 덮어쓸 수도 있습니다.

다음 예제에서는 다양한 형식의 새 레지스트리 항목을 만드는 방법을 보여 줍니다. 레지스트리 값은 MySoftwareKey라는 새 키에서 HKEY_CURRENT_USER\Software만들어집니다. 변수 $key 는 새 키 개체를 저장하는 데 사용됩니다.

$key = New-Item -Path HKCU:\Software -Name MySoftwareKey
$newItemPropertySplat = @{
    Path = $key.PSPath
    Name = 'DefaultFolders'
    PropertyType = 'MultiString'
    Value = 'Home', 'Temp', 'Publish'
}
New-ItemProperty @newItemPropertySplat
DefaultFolders : {Home, Temp, Publish}
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName    : MySoftwareKey
PSProvider     : Microsoft.PowerShell.Core\Registry

후속 명령에서 키 개체의 PSPath 속성을 사용할 수 있습니다.

New-ItemProperty -Path $key.PSPath -Name MaxAllowed -PropertyType QWord -Value 1024
MaxAllowed   : 1024
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName  : MySoftwareKey
PSProvider   : Microsoft.PowerShell.Core\Registry

키를 파이프 $key 하여 New-ItemProperty 값을 추가할 수도 있습니다.

$date = Get-Date -Format 'dd-MMM-yyyy'
$newItemPropertySplat = @{
    Name = 'BinaryDate'
    PropertyType = 'Binary'
    Value = ([System.Text.Encoding]::UTF8.GetBytes($date))
}
$key | New-ItemProperty @newItemPropertySplat
BinaryDate   : {51, 49, 45, 74…}
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName  : MySoftwareKey
PSProvider   : Microsoft.PowerShell.Core\Registry

내용을 $key 표시하면 새 항목이 표시됩니다.

$key
    Hive: HKEY_CURRENT_USER\Software

Name                           Property
----                           --------
MySoftwareKey                  DefaultFolders : {Home, Temp, Publish}
                               MaxAllowed     : 1024
                               BinaryDate     : {51, 49, 45, 74…}

다음 예제에서는 각 종류의 레지스트리 항목에 대한 값 형식을 보여줍니다.

$key.GetValueNames() | Select-Object @{n='ValueName';e={$_}},
     @{n='ValueKind';e={$key.GetValueKind($_)}},
     @{n='Type';e={$key.GetValue($_).GetType()}},
     @{n='Value';e={$key.GetValue($_)}}
ValueName        ValueKind Type            Value
---------        --------- ----            -----
DefaultFolders MultiString System.String[] {Home, Temp, Publish}
MaxAllowed           QWord System.Int64    1024
BinaryDate          Binary System.Byte[]   {51, 49, 45, 74…}

레지스트리 항목 이름 바꾸기

PowerShellPath 항목의 이름을 "PSHome"으로 바꾸려면 다음을 사용합니다Rename-ItemProperty.

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat

이름이 바뀐 값을 표시하려면 명령에 PassThru 매개 변수를 추가합니다.

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
    PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat

레지스트리 항목 삭제

PSHome 및 PowerShellPath 레지스트리 항목을 모두 삭제하려면 다음을 사용합니다 Remove-ItemProperty.

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath