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\CurrentVersion
registri , 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.
- Ambil nilai entri Jalur saat ini menggunakan
Get-ItemProperty
. - Tambahkan nilai baru, pisahkan dengan
;
. - 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 $PSHome
Windows 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