Kayıt defteri girdileri ile çalışma
Bu örnek yalnızca Windows platformları için geçerlidir.
Kayıt defteri girdileri anahtarların özellikleri olduğundan ve bu nedenle doğrudan göz atılamadığından, bunlarla çalışırken biraz farklı bir yaklaşım benimsememiz gerekir.
Kayıt defteri girdilerini listeleme
Kayıt defteri girdilerini incelemenin birçok farklı yolu vardır. En basit yol, bir anahtarla ilişkili özellik adlarını almaktır. Örneğin, kayıt defteri anahtarındaki HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
girdilerin adlarını görmek için kullanın Get-Item
. Kayıt defteri anahtarları, anahtardaki kayıt defteri girdilerinin listesi olan genel adı "Özellik" olan bir özelliğe sahiptir. Aşağıdaki komut Property özelliğini seçer ve öğeleri bir listede görüntülenecek şekilde genişletir:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId
Kayıt defteri girdilerini daha okunabilir bir biçimde görüntülemek için kullanın 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
Anahtarın Windows PowerShell ile ilgili özelliklerinin tümüne PSPath, PSParentPath, PSChildName ve PSProvider gibi "PS" ön ekleri eklenir.
Geçerli konuma başvurmak için gösterimi kullanabilirsiniz *.*
. Önce CurrentVersion kayıt defteri kapsayıcısına geçmek için kullanabilirsinizSet-Location
:
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Alternatif olarak, yerleşik PSDrive'ı HKLM:
ile Set-Location
kullanabilirsiniz:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Ardından, tam yol belirtmeden özellikleri listelemek için geçerli konumun gösterimini kullanabilirsiniz .
:
Get-ItemProperty -Path .
...
DevicePath : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir : C:\Program Files
...
Yol genişletme dosya sistemindekiyle aynı şekilde çalışır, bu nedenle bu konumdan kullanmak Get-ItemProperty -Path ..\Help
üzere HKLM:\SOFTWARE\Microsoft\Windows\Help
ItemProperty listesini alabilirsiniz.
Tek bir kayıt defteri girdisi alma
Kayıt defteri anahtarında belirli bir girdiyi almak istiyorsanız, çeşitli olası yaklaşımlardan birini kullanabilirsiniz. Bu örnek, içindeki HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
DevicePath değerini bulur.
kullanarakGet-ItemProperty
, anahtarın adını belirtmek için Path parametresini ve DevicePath girişinin adını belirtmek için Name parametresini kullanın.
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
Bu komut, standart Windows PowerShell özelliklerinin yanı sıra DevicePath özelliğini döndürür.
Not
Get-ItemProperty
Filter, Include ve Exclude parametreleri olsa da, özellik adına göre filtrelemek için kullanılamazlar. Bu parametreler, öğe özellikleri olan kayıt defteri girdileri değil, öğe yolları olan kayıt defteri anahtarlarına başvurur.
Bir diğer seçenek de komut satırı aracını kullanmaktır reg.exe
. ile ilgili reg.exe
yardım için komut istemine yazın reg.exe /?
. DevicePath girdisini bulmak için aşağıdaki komutta gösterildiği gibi kullanınreg.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
Bu yöntem büyük ikili verilerle veya ters eğik çizgi (\
) gibi karakterler içeren kayıt defteri giriş adlarıyla çalışmasa da, bazı kayıt defteri girdilerini bulmak için WshShell COM nesnesini de kullanabilirsiniz. Öğe yoluna bir ayırıcı ile \
özellik adını ekleyin:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Tek bir kayıt defteri girdisi ayarlama
Kayıt defteri anahtarındaki belirli bir girişi değiştirmek istiyorsanız, çeşitli olası yaklaşımlardan birini kullanabilirsiniz. Bu örnek altındaki HKEY_CURRENT_USER\Environment
Yol girdisini değiştirir. Yol girdisi yürütülebilir dosyaların nerede bulunacağı belirtir.
- kullanarak
Get-ItemProperty
Yol girdisinin geçerli değerini alın. - Yeni değeri bir ile
;
ayırarak ekleyin. - Kayıt defteri girdisini değiştirmek için belirtilen anahtar, giriş adı ve değerle kullanın
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
Not
Set-ItemProperty
Filter, Include ve Exclude parametreleri olsa da, özellik adına göre filtrelemek için kullanılamazlar. Bu parametreler, öğe özellikleri olan kayıt defteri girdileri değil, öğe yolları olan kayıt defteri anahtarlarına başvurur.
Bir diğer seçenek de Reg.exe komut satırı aracını kullanmaktır. reg.exe ile ilgili yardım için komut istemine yazın reg.exe /?
.
Aşağıdaki örnek, yukarıdaki örnekte eklenen yolu kaldırarak Yol girdisini değiştirir.
Get-ItemProperty
, 'den reg query
döndürülen dizeyi ayrıştırmak zorunda kalmamak için geçerli değeri almak için hala kullanılır. SubString ve LastIndexOf yöntemleri, Yol girdisine eklenen son yolu almak için kullanılır.
$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.
Yeni kayıt defteri girdileri oluşturma
CurrentVersion anahtarına "PowerShellPath" adlı yeni bir girdi eklemek için anahtarın yolu, giriş adı ve girdinin değeri ile kullanınNew-ItemProperty
. Bu örnekte, Windows PowerShell için yükleme dizininin yolunu depolayan Windows PowerShell değişkeninin $PSHome
değerini alacağız.
Aşağıdaki komutu kullanarak yeni girdiyi anahtara ekleyebilirsiniz ve komut da yeni girdi hakkındaki bilgileri döndürür:
$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, aşağıdaki tablodan bir Microsoft.Win32.RegistryValueKind sabit listesi üyesinin adı olmalıdır:
String
- REG_SZ değerleri için kullanılır.[System.String]
Bir nesneyi Value parametresine geçirin.ExpandString
- REG_EXPAND_SZ değerleri için kullanılır.[System.String]
Bir nesneyi Value parametresine geçirin. Dize, değer alındığında genişletilen ortam değişkenlerine açıklanmamış başvurular içermelidir.Binary
- REG_BINARY değerler için kullanılır.[System.Byte[]]
Bir nesneyi Value parametresine geçirin.DWord
- REG_DWORD değerler için kullanılır.[System.Int32]
Bir nesneyi Value parametresine geçirin.MultiString
- REG_MULTI_SZ değerleri için kullanılır.[System.String[]]
Bir nesneyi Value parametresine geçirin.QWord
- REG_QWORD değerler için kullanılır.[System.Int64]
Bir nesneyi Value parametresine geçirin.
Path parametresi için bir değer dizisi belirterek birden çok konuma kayıt defteri girdisi ekleyebilirsiniz:
$newItemPropertySplat = @{
Name = 'PowerShellPath'
PropertyType = 'String'
Value = $PSHome
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat
Herhangi bir komuta Force parametresini New-ItemProperty
ekleyerek önceden var olan bir kayıt defteri girdisi değerinin üzerine de yazabilirsiniz.
Aşağıdaki örneklerde, çeşitli türlerde yeni kayıt defteri girdilerinin nasıl oluşturulacağı gösterilmektedir. Kayıt defteri değerleri altında HKEY_CURRENT_USER\Software
MySoftwareKey adlı yeni bir anahtarda oluşturulur. $key
değişkeni, yeni anahtar nesnesini depolamak için kullanılır.
$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
Sonraki komutlarda anahtar nesnesinin PSPath özelliğini kullanabilirsiniz.
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
Anahtara değer eklemek için New-ItemProperty
adresine de $key
kanal ekleyebilirsiniz.
$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
öğesinin içeriği $key
görüntülendiğinde yeni girdiler gösterilir.
$key
Hive: HKEY_CURRENT_USER\Software
Name Property
---- --------
MySoftwareKey DefaultFolders : {Home, Temp, Publish}
MaxAllowed : 1024
BinaryDate : {51, 49, 45, 74…}
Aşağıdaki örnekte her kayıt defteri girdisi türü için değer türü gösterilmektedir:
$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…}
Kayıt defteri girdilerini yeniden adlandırma
PowerShellPath girişini "PSHome" olarak yeniden adlandırmak için kullanınRename-ItemProperty
:
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat
Yeniden adlandırılan değeri görüntülemek için komutuna PassThru parametresini ekleyin.
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat
Kayıt defteri girdilerini silme
HEM PSHome hem de PowerShellPath kayıt defteri girdilerini silmek için kullanın Remove-ItemProperty
:
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath
PowerShell