Aracılığıyla paylaş


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\CurrentVersiongirdilerin 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-Locationkullanabilirsiniz:

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\CurrentVersionDevicePath 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.exeyardı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\EnvironmentYol girdisini değiştirir. Yol girdisi yürütülebilir dosyaların nerede bulunacağı belirtir.

  1. kullanarak Get-ItemPropertyYol girdisinin geçerli değerini alın.
  2. Yeni değeri bir ile ;ayırarak ekleyin.
  3. 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 querydö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 $PSHomedeğ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\SoftwareMySoftwareKey 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