Práce s položkami registru
Tato ukázka platí jenom pro platformy Windows.
Vzhledem k tomu, že položky registru jsou vlastnosti klíčů a například není možné je přímo procházet, musíme při práci s nimi vzít trochu jiný přístup.
Výpis položek registru
Existuje mnoho různých způsobů, jak prozkoumat položky registru. Nejjednodušší způsob je získat názvy vlastností přidružené ke klíči. Chcete-li například zobrazit názvy položek v klíči HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
registru , použijte Get-Item
. Klíče registru mají vlastnost s obecným názvem "Property", který je seznam položek registru v klíči. Následující příkaz vybere vlastnost Vlastnost a rozbalí položky tak, aby se zobrazily v seznamu:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId
Chcete-li zobrazit položky registru v čitelnějším formuláři, použijte 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
Vlastnosti související s Windows PowerShellem pro klíč mají předponu PS, například PSPath, PSParentPath, PSChildName a PSProvider.
Zápis můžete použít *.*
k odkazování na aktuální umístění. Nejprve můžete změnit Set-Location
na kontejner registru CurrentVersion :
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Alternativně můžete použít integrovaný HKLM:
PSDrive s Set-Location
:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Zápis pro aktuální umístění pak můžete použít .
k výpisu vlastností bez zadání úplné cesty:
Get-ItemProperty -Path .
...
DevicePath : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir : C:\Program Files
...
Rozšíření cesty funguje stejně jako v rámci systému souborů, takže z tohoto umístění můžete získat výpis ItemProperty pro HKLM:\SOFTWARE\Microsoft\Windows\Help
použití Get-ItemProperty -Path ..\Help
.
Získání jedné položky registru
Pokud chcete načíst konkrétní položku v klíči registru, můžete použít jeden z několika možných přístupů. Tento příklad najde hodnotu DevicePath v HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
.
Pomocí Get-ItemProperty
parametru Path zadejte název klíče a parametr Name k zadání názvu položky 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
Tento příkaz vrátí standardní vlastnosti Windows PowerShellu a také vlastnost DevicePath .
Poznámka:
Přestože Get-ItemProperty
má parametry Filter, Include a Exclude , nelze je použít k filtrování podle názvu vlastnosti. Tyto parametry odkazují na klíče registru, což jsou cesty položek, nikoli položky registru, což jsou vlastnosti položky.
Další možností je použít nástroj příkazového reg.exe
řádku. Nápovědu k reg.exe
příkazu pište reg.exe /?
na příkazovém řádku. Pokud chcete najít položku DevicePath , použijte reg.exe
ji, jak je znázorněno v následujícím příkazu:
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
Objekt COM WshShellu můžete také použít k vyhledání některých položek registru, i když tato metoda nefunguje s velkými binárními daty nebo s názvy položek registru, které obsahují znaky, jako je zpětné lomítko (\
). Připojte název vlastnosti k cestě k položce s oddělovačem \
:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Nastavení jedné položky registru
Pokud chcete změnit určitou položku v klíči registru, můžete použít jeden z několika možných přístupů. Tento příklad upraví položku Path v části HKEY_CURRENT_USER\Environment
. Položka Cesta určuje, kam se mají najít spustitelné soubory.
- Načte aktuální hodnotu položky Cesta pomocí
Get-ItemProperty
. - Přidejte novou hodnotu a oddělte ji pomocí parametru
;
. - K úpravě položky registru použijte
Set-ItemProperty
zadaný klíč, název položky a hodnotu.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath
Poznámka:
Přestože Set-ItemProperty
má parametry Filter, Include a Exclude , nelze je použít k filtrování podle názvu vlastnosti. Tyto parametry odkazují na klíče registru , což jsou cesty položek, a ne položky registru, které jsou vlastnostmi položky.
Další možností je použít nástroj příkazového řádku Reg.exe. Nápovědu k reg.exe reg.exe /?
pište na příkazovém řádku.
Následující příklad změní položku Path odebráním cesty přidané v příkladu výše.
Get-ItemProperty
se stále používá k načtení aktuální hodnoty, aby se nemusel analyzovat řetězec vrácený z reg query
. Metody SubString a LastIndexOf slouží k načtení poslední cesty přidané do položky Path .
$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.
Vytváření nových položek registru
Chcete-li přidat novou položku s názvem "PowerShellPath" do klíče CurrentVersion , použijte New-ItemProperty
s cestou ke klíči, název položky a hodnotu položky. V tomto příkladu použijeme hodnotu proměnné $PSHome
Prostředí Windows PowerShell, která ukládá cestu k instalačnímu adresáři prostředí Windows PowerShell.
Novou položku můžete do klíče přidat pomocí následujícího příkazu a příkaz také vrátí informace o nové položce:
$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 musí být název člena výčtu Microsoft.Win32.RegistryValueKind z následující tabulky:
String
- Používá se pro REG_SZ hodnoty.[System.String]
Předejte objekt parametru Value.ExpandString
- Používá se pro REG_EXPAND_SZ hodnoty.[System.String]
Předejte objekt parametru Value. Řetězec by měl obsahovat nepotřebné odkazy na proměnné prostředí, které se rozbalí při načtení hodnoty.Binary
- Používá se pro REG_BINARY hodnoty.[System.Byte[]]
Předejte objekt parametru Value.DWord
- Používá se pro REG_DWORD hodnoty.[System.Int32]
Předejte objekt parametru Value.MultiString
- Používá se pro REG_MULTI_SZ hodnoty.[System.String[]]
Předejte objekt parametru Value.QWord
- Používá se pro REG_QWORD hodnoty.[System.Int64]
Předejte objekt parametru Value.
Položku registru můžete přidat do více umístění zadáním pole hodnot pro parametr Path :
$newItemPropertySplat = @{
Name = 'PowerShellPath'
PropertyType = 'String'
Value = $PSHome
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat
Můžete také přepsat předem existující hodnotu položky registru přidáním parametru Force do libovolného New-ItemProperty
příkazu.
Následující příklady ukazují, jak vytvořit nové položky registru různých typů. Hodnoty registru se vytvoří v novém klíči s názvem MySoftwareKey v části HKEY_CURRENT_USER\Software
. Proměnná $key
se používá k uložení nového objektu klíče.
$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
Vlastnost PSPath objektu klíče můžete použít v dalších příkazech.
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
Můžete také přidat $key
New-ItemProperty
hodnotu ke klíči.
$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
Zobrazení obsahu $key
nových položek
$key
Hive: HKEY_CURRENT_USER\Software
Name Property
---- --------
MySoftwareKey DefaultFolders : {Home, Temp, Publish}
MaxAllowed : 1024
BinaryDate : {51, 49, 45, 74…}
Následující příklad ukazuje typ hodnoty pro každý druh položky registru:
$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…}
Přejmenování položek registru
Chcete-li přejmenovat položku PowerShellPath na PSHome, použijte Rename-ItemProperty
:
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat
Pokud chcete zobrazit přejmenovanou hodnotu, přidejte do příkazu parametr PassThru .
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat
Odstraňování položek registru
Pokud chcete odstranit položky registru PSHome i PowerShellPath, použijte Remove-ItemProperty
:
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath