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\CurrentVersionregistru , 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-ItemPropertyparametru 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-ItemPropertyparametry 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.exepří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.

  1. Načte aktuální hodnotu položky Cesta pomocí Get-ItemProperty.
  2. Přidejte novou hodnotu a oddělte ji pomocí parametru ;.
  3. 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-ItemPropertyparametry 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é $PSHomeProstř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:

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 musí být název člena výčtu Microsoft.Win32.RegistryValueKind z následující tabulky:

Hodnota PropertyType Význam
Binární Binární data
Dword Číslo, které je platné UInt32
ExpandString Řetězec, který může obsahovat proměnné prostředí, které se dynamicky rozšiřují
MultiString Víceřádkový řetězec
String Libovolná řetězcová hodnota
QWord 8 bajtů binárních dat

Položku registru můžete přidat do více umístění zadáním pole hodnot pro parametr Path :

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

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.

Přejmenování položek registru

Chcete-li přejmenovat položku PowerShellPath na PSHome, použijte Rename-ItemProperty:

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

Pokud chcete zobrazit přejmenovanou hodnotu, přidejte do příkazu parametr PassThru .

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

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