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:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
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:

Nilai PropertyType Makna
Biner Data biner
DWord Angka yang merupakan UInt32 yang valid
ExpandString String yang dapat berisi variabel lingkungan yang diperluas secara dinamis
MultiString String multibaris
String Nilai string apa pun
QWord 8 byte data biner

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

New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
  -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion

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

Mengganti nama entri registri

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

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

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

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

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