레지스트리 항목 작업
이 샘플은 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\Help
의 ItemProperty 목록을 가져올 수 있습니다.
단일 레지스트리 항목 가져오기
레지스트리 키에서 특정 항목을 검색하려면 여러 가지 방법 중 하나를 사용할 수 있습니다. 이 예제에서는 .에서 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
. 경로 항목은 실행 파일을 찾을 위치를 지정합니다.
- 를 사용하여
Get-ItemProperty
경로 항목의 현재 값을 검색합니다. - 새 값을 추가하여 .을(를) 구분
;
합니다. - 레지스트리 항목을 수정하려면 지정된 키, 항목 이름 및 값과 함께 사용합니다
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-ItemProperty
는 reg query
에서 반환된 문자열을 구문 분석할 필요가 없도록 현재 값을 검색하는 데 사용됩니다. SubString 및 LastIndexOf 메서드는 경로 항목에 추가된 마지막 경로를 검색하는 데 사용됩니다.
$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
PowerShell