Kayıt defteri girdileriyle çalışma
Bu örnek yalnızca Windows platformları için geçerlidir.
Kayıt defteri girişleri anahtarların özellikleri olduğundan ve bu nedenle doğrudan göz atılamadığından, onlarla çalışırken biraz farklı bir yaklaşım izlememiz 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, HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion kayıt defteri anahtarındaki girişlerin adlarını görmek için Get-Item'i kullanın. Kayıt defteri anahtarları, anahtardaki kayıt defteri girdilerinin listesi olan "Özellik" genel adını taşıyan bir özelliğe sahiptir. Aşağıdaki komut, Özellik ö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 Get-ItemProperty'i kullanın:
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ü "PS" ön ekiyle donatılmıştır; örneğin PSPath, PSParentPath, PSChildName ve PSProvider.
Geçerli konuma atıfta bulunmak için *.* gösterimini kullanabilirsiniz. Öncelikle CurrentVersion kayıt defteri kapsayıcısına geçmek için Set-Location'ı kullanabilirsiniz:
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Alternatif olarak, Set-Location ile yerleşik HKLM: PSDrive'ı kullanabilirsiniz:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Daha sonra özellikleri tam yol belirtmeden listelemek için geçerli konum için . 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; dolayısıyla bu konumdan HKLM:\SOFTWARE\Microsoft\Windows\Help için ItemProperty listesini Get-ItemProperty -Path ..\Help.
Tek bir kayıt defteri girişi alma
Kayıt defteri anahtarındaki belirli bir girişi almak istiyorsanız birkaç olası yaklaşımdan birini kullanabilirsiniz. Bu örnek, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion konumunda DevicePath değerini bulur.
Get-ItemProperty'i kullanarak, anahtarın adını belirtmek için Path parametresini, Ad parametresini ise adını belirtmek için kullanın. >DevicePath girişi.
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 de döndürür.
Not
Get-ItemProperty'de Filtre, Dahil Et ve Hariç Tut parametreleri bulunsa da, bunlar şuna göre filtrelemek için kullanılamaz: mülk adı. Bu parametreler, öğe özellikleri olan kayıt defteri girdileri değil, öğe yolları olan kayıt defteri anahtarlarını ifade eder.
Diğer bir seçenek de reg.exe komut satırı aracını kullanmaktır. reg.exe ile ilgili yardım için komut istemine reg.exe /? yazın. DevicePath girişini bulmak için aşağıdaki komutta gösterildiği gibi reg.exe'yi kullanın:
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
Bazı kayıt defteri girişlerini bulmak için WshShell COM nesnesini de kullanabilirsiniz; ancak bu yöntem büyük ikili verilerle veya ters eğik çizgi (\ ) gibi karakterler içeren kayıt defteri girişi adlarıyla çalışmaz. kodu). Özellik adını bir \ ayırıcıyla öğe yoluna ekleyin:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Tek bir kayıt defteri girişi ayarlama
Kayıt defteri anahtarındaki belirli bir girişi değiştirmek isterseniz birkaç olası yaklaşımdan birini kullanabilirsiniz. Bu örnek, HKEY_CURRENT_USER\Environment altındaki Yol girişini değiştirir. Yol girişi yürütülebilir dosyaların nerede bulunacağını belirtir.
Get-ItemProperty'yi kullanarak Path girişinin geçerli değerini alın.- Yeni değeri
;ile ayırarak ekleyin. - Kayıt defteri girişini değiştirmek için belirtilen anahtar, giriş adı ve değerle
Set-ItemProperty'i kullanın.
$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'de Filtre, Dahil Et ve Hariç Tut parametreleri bulunsa da, bunlar şuna göre filtrelemek için kullanılamaz: mülk adı. Bu parametreler, öğe özellikleri olan kayıt defteri girişlerine değil, öğe yolları olan kayıt defteri anahtarlarına atıfta bulunur.
Başka bir seçenek de Reg.exe komut satırı aracını kullanmaktır. Reg.exe ile ilgili yardım için komut istemine reg.exe /? yazın.
Aşağıdaki örnek, yukarıdaki örnekte eklenen yolu kaldırarak Yol girişini değiştirir. Reg query'ten döndürülen dizeyi ayrıştırma zorunluluğunu ortadan kaldırmak amacıyla geçerli değeri almak için hâlâ Get-ItemProperty kullanılıyor. SubString ve LastIndexOf yöntemleri, Path girişine 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 girişleri oluşturma
CurrentVersion anahtarına "PowerShellPath" adlı yeni bir giriş eklemek için anahtarın yolu, giriş adı ve giriş değeriyle birlikte New-ItemProperty'yi kullanın. Bu örnek için, Windows PowerShell kurulum dizininin yolunu saklayan Windows PowerShell değişkeni $PSHome'un değerini alacağız.
Aşağıdaki komutu kullanarak yeni girişi anahtara ekleyebilirsiniz; komut ayrıca yeni girişle ilgili bilgileri de 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 tablodaki Microsoft.Win32.RegistryValueKind numaralandırma üyesinin adı olmalıdır:
String- REG_SZ değerleri için kullanılır. Value parametresine bir[System.String]nesnesi iletin.ExpandString- REG_EXPAND_SZ değerleri için kullanılır. Value parametresine bir[System.String]nesnesi iletin. Dize, değer alındığında genişletilen ortam değişkenlerine genişletilmemiş başvurular içermelidir.İkili- REG_BINARY değerleri için kullanılır. Value parametresine bir[System.Byte[]]nesnesi iletin.DWord- REG_DWORD değerleri için kullanılır. Value parametresine bir[System.Int32]nesnesi iletin.MultiString- REG_MULTI_SZ değerleri için kullanılır. Value parametresine bir[System.String[]]nesnesi iletin.QWord- REG_QWORD değerleri için kullanılır. Value parametresine bir[System.Int64]nesnesi iletin.
Yol parametresi için bir değer dizisi belirterek, birden fazla konuma bir 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
Ayrıca herhangi bir New-ItemProperty komutuna Force parametresini ekleyerek önceden var olan bir kayıt defteri girişi değerinin üzerine yazabilirsiniz.
Aşağıdaki örnekler, çeşitli türlerde yeni kayıt defteri girişlerinin nasıl oluşturulacağını gösterir. Kayıt defteri değerleri, HKEY_CURRENT_USER\Software altında 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 nesnenin 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 bir değer eklemek için $key'i New-ItemProperty'e de yönlendirebilirsiniz.
$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 içeriğinin görüntülenmesi yeni girişleri gösterir.
$key
Hive: HKEY_CURRENT_USER\Software
Name Property
---- --------
MySoftwareKey DefaultFolders : {Home, Temp, Publish}
MaxAllowed : 1024
BinaryDate : {51, 49, 45, 74…}
Aşağıdaki örnek, her tür kayıt defteri girdisinin değer türünü gösterir:
$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 Rename-ItemProperty'i kullanın:
$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 komuta PassThru parametresini ekleyin.
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat
Kayıt defteri girişlerini silme
Hem PSHome hem de PowerShellPath kayıt defteri girişlerini silmek için Remove-ItemProperty'i kullanın:
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath