Bagikan melalui


Bekerja dengan entri registri

Sampel ini hanya berlaku untuk platform Windows.

Karena entri registri adalah properti kunci dan, dengan demikian, tidak dapat langsung dijelajahi, kita perlu mengambil pendekatan yang sedikit berbeda saat bekerja dengannya.

Mencantumkan entri registri

Ada banyak cara berbeda untuk memeriksa entri registri. Cara paling sederhana adalah dengan mendapatkan nama properti yang terkait dengan kunci. Misalnya, untuk melihat nama entri dalam kunci HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersionregistri , gunakan Get-Item. Kunci registri memiliki properti dengan nama generik "Properti" yang merupakan daftar entri registri di kunci. Perintah berikut memilih properti Properti dan memperluas item sehingga item ditampilkan dalam daftar:

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

Untuk melihat entri registri dalam bentuk yang lebih mudah dibaca, gunakan 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

Properti terkait Windows PowerShell untuk kunci semuanya diawali dengan "PS", seperti PSPath, PSParentPath, PSChildName, dan PSProvider.

Anda dapat menggunakan *.* notasi untuk merujuk ke lokasi saat ini. Anda dapat menggunakan Set-Location untuk mengubah ke kontainer registri CurrentVersion terlebih dahulu:

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

Atau, Anda dapat menggunakan PSDrive bawaan HKLM: dengan Set-Location:

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

Anda kemudian dapat menggunakan . notasi untuk lokasi saat ini untuk mencantumkan properti tanpa menentukan jalur lengkap:

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

Ekspansi jalur berfungsi sama seperti yang dilakukan dalam sistem file, jadi dari lokasi ini Anda bisa mendapatkan daftar ItemProperty untuk HKLM:\SOFTWARE\Microsoft\Windows\Help menggunakan Get-ItemProperty -Path ..\Help.

Mendapatkan entri registri tunggal

Jika Anda ingin mengambil entri tertentu dalam kunci registri, Anda dapat menggunakan salah satu dari beberapa pendekatan yang mungkin. Contoh ini menemukan nilai DevicePath di HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Menggunakan Get-ItemProperty, gunakan parameter Jalur untuk menentukan nama kunci, dan parameter Nama untuk menentukan nama entri 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

Perintah ini mengembalikan properti Windows PowerShell standar serta properti DevicePath .

Catatan

Meskipun Get-ItemProperty memiliki parameter Filter, Sertakan, dan Kecualikan , parameter tersebut tidak dapat digunakan untuk memfilter menurut nama properti. Parameter ini mengacu pada kunci registri, yang merupakan jalur item dan bukan entri registri, yang merupakan properti item.

Opsi lain adalah menggunakan reg.exe alat baris perintah. Untuk bantuan dengan reg.exe, ketik reg.exe /? pada prompt perintah. Untuk menemukan entri DevicePath , gunakan reg.exe seperti yang ditunjukkan dalam perintah berikut:

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

Anda juga dapat menggunakan objek WshShell COM untuk menemukan beberapa entri registri, meskipun metode ini tidak berfungsi dengan data biner besar atau dengan nama entri registri yang menyertakan karakter seperti garis miring terbalik (\). Tambahkan nama properti ke jalur item dengan pemisah \ :

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

Mengatur entri registri tunggal

Jika Anda ingin mengubah entri tertentu dalam kunci registri, Anda dapat menggunakan salah satu dari beberapa pendekatan yang mungkin. Contoh ini memodifikasi entri Jalur di bawah HKEY_CURRENT_USER\Environment. Entri Jalur menentukan tempat menemukan file yang dapat dieksekusi.

  1. Ambil nilai entri Jalur saat ini menggunakan Get-ItemProperty.
  2. Tambahkan nilai baru, pisahkan dengan ;.
  3. Gunakan Set-ItemProperty dengan kunci, nama entri, dan nilai yang ditentukan untuk mengubah entri registri.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

Catatan

Meskipun Set-ItemProperty memiliki parameter Filter, Sertakan, dan Kecualikan , parameter tersebut tidak dapat digunakan untuk memfilter menurut nama properti. Parameter ini mengacu pada kunci registri—yang merupakan jalur item—dan bukan entri registri—yang merupakan properti item.

Opsi lain adalah menggunakan alat baris perintah Reg.exe. Untuk bantuan terkait reg.exe, ketik reg.exe /? pada prompt perintah.

Contoh berikut mengubah entri Jalur dengan menghapus jalur yang ditambahkan dalam contoh di atas. Get-ItemProperty masih digunakan untuk mengambil nilai saat ini untuk menghindari keharusan mengurai string yang dikembalikan dari reg query. Metode SubString dan LastIndexOf digunakan untuk mengambil jalur terakhir yang ditambahkan ke entri Jalur .

$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.

Membuat entri registri baru

Untuk menambahkan entri baru bernama "PowerShellPath" ke kunci CurrentVersion , gunakan New-ItemProperty dengan jalur ke kunci, nama entri, dan nilai entri. Untuk contoh ini, kita akan mengambil nilai variabel $PSHomeWindows PowerShell , yang menyimpan jalur ke direktori penginstalan untuk Windows PowerShell.

Anda dapat menambahkan entri baru ke kunci menggunakan perintah berikut, dan perintah juga mengembalikan informasi tentang entri baru:

$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 harus merupakan nama anggota enumerasi Microsoft.Win32.RegistryValueKind dari tabel berikut:

  • String - Digunakan untuk nilai REG_SZ. Teruskan [System.String] objek ke parameter Nilai .
  • ExpandString - Digunakan untuk nilai REG_EXPAND_SZ. Teruskan [System.String] objek ke parameter Nilai . String harus berisi referensi yang tidak tertandingi ke variabel lingkungan yang diperluas saat nilai diambil.
  • Binary - Digunakan untuk nilai REG_BINARY. Teruskan [System.Byte[]] objek ke parameter Nilai .
  • DWord - Digunakan untuk nilai REG_DWORD. Teruskan [System.Int32] objek ke parameter Nilai .
  • MultiString - Digunakan untuk nilai REG_MULTI_SZ. Teruskan [System.String[]] objek ke parameter Nilai .
  • QWord - Digunakan untuk nilai REG_QWORD. Teruskan [System.Int64] objek ke parameter Nilai .

Anda dapat menambahkan entri registri ke beberapa lokasi dengan menentukan array nilai untuk parameter Jalur :

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

Anda juga dapat menimpa nilai entri registri yang sudah ada sebelumnya dengan menambahkan parameter Force ke perintah apa pun New-ItemProperty .

Contoh berikut menunjukkan cara membuat entri registri baru dari berbagai jenis. Nilai registri dibuat dalam kunci baru bernama MySoftwareKey di bawah HKEY_CURRENT_USER\Software. Variabel $key digunakan untuk menyimpan objek kunci baru.

$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

Anda dapat menggunakan properti PSPath dari objek kunci dalam perintah berikutnya.

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

Anda juga dapat menyalurkan $key ke untuk New-ItemProperty menambahkan nilai ke kunci.

$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

Menampilkan isi $key memperlihatkan entri baru.

$key
    Hive: HKEY_CURRENT_USER\Software

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

Contoh berikut menunjukkan jenis nilai untuk setiap jenis entri registri:

$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…}

Mengganti nama entri registri

Untuk mengganti nama entri PowerShellPath menjadi "PSHome," gunakan Rename-ItemProperty:

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

Untuk menampilkan nilai yang diganti namanya, tambahkan parameter PassThru ke perintah .

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

Menghapus entri registri

Untuk menghapus entri registri PSHome dan PowerShellPath, gunakan Remove-ItemProperty:

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