Sdílet prostřednictvím


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:

$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