Met registervermeldingen werken

Dit voorbeeld is alleen van toepassing op Windows-platforms.

Omdat registervermeldingen eigenschappen van sleutels zijn en daarom niet rechtstreeks kunnen worden doorgekeken, moeten we een iets andere benadering hanteren wanneer u ermee werkt.

Registervermeldingen vermelden

Er zijn veel verschillende manieren om registervermeldingen te onderzoeken. De eenvoudigste manier is om de eigenschapsnamen op te halen die zijn gekoppeld aan een sleutel. Als u bijvoorbeeld de namen van de vermeldingen in de registersleutel HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersionwilt zien, gebruikt u Get-Item. Registersleutels hebben een eigenschap met de algemene naam 'Eigenschap' die een lijst met registervermeldingen in de sleutel is. Met de volgende opdracht selecteert u de eigenschap Eigenschap en vouwt u de items uit zodat ze worden weergegeven in een lijst:

Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
    Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

Als u de registervermeldingen in een beter leesbare vorm wilt weergeven, gebruikt u 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

De windows PowerShell-gerelateerde eigenschappen voor de sleutel worden allemaal voorafgegaan door 'PS', zoals PSPath, PSParentPath, PSChildName en PSProvider.

U kunt de *.* notatie gebruiken om naar de huidige locatie te verwijzen. U kunt Set-Location eerst overschakelen naar de CurrentVersion-registercontainer :

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

U kunt ook de ingebouwde HKLM: PSDrive gebruiken met Set-Location:

Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

Vervolgens kunt u de . notatie voor de huidige locatie gebruiken om de eigenschappen weer te geven zonder een volledig pad op te geven:

Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

Paduitbreiding werkt hetzelfde als in het bestandssysteem, dus vanaf deze locatie kunt u de vermelding ItemProperty ophalen voor HKLM:\SOFTWARE\Microsoft\Windows\Help gebruik Get-ItemProperty -Path ..\Help.

Eén registervermelding verkrijgen

Als u een specifieke vermelding in een registersleutel wilt ophalen, kunt u een van de verschillende mogelijke benaderingen gebruiken. In dit voorbeeld wordt de waarde van DevicePath gevonden in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Gebruik Get-ItemPropertyde parameter Path om de naam van de sleutel op te geven en de parameter Naam om de naam van de DevicePath-vermelding op te geven.

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

Met deze opdracht worden de standaardeigenschappen van Windows PowerShell en de eigenschap DevicePath geretourneerd.

Notitie

Hoewel Get-ItemProperty de parameters Filter, Opnemen en Uitsluiten hebben, kunnen ze niet worden gebruikt om te filteren op eigenschapsnaam. Deze parameters verwijzen naar registersleutels, die itempaden zijn en geen registervermeldingen, die itemeigenschappen zijn.

Een andere optie is het reg.exe opdrachtregelprogramma te gebruiken. Typ bij een opdrachtprompt voor hulp bij reg.exereg.exe /? de opdrachtprompt. Als u de DevicePath-vermelding wilt vinden, gebruikt reg.exe u deze in de volgende opdracht:

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

U kunt ook het WshShell COM-object gebruiken om enkele registervermeldingen te vinden, hoewel deze methode niet werkt met grote binaire gegevens of met registervermeldingsnamen die tekens bevatten zoals backslash (\). Voeg de eigenschapsnaam toe aan het itempad met een \ scheidingsteken:

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

Eén registervermelding instellen

Als u een specifieke vermelding in een registersleutel wilt wijzigen, kunt u een van de verschillende mogelijke benaderingen gebruiken. In dit voorbeeld wordt de vermelding Pad onder HKEY_CURRENT_USER\Environmentgewijzigd. De padvermelding geeft aan waar uitvoerbare bestanden moeten worden gevonden.

  1. Haal de huidige waarde van de vermelding Pad op met behulp van Get-ItemProperty.
  2. Voeg de nieuwe waarde toe, gescheiden door een ;.
  3. Gebruik Set-ItemProperty deze optie met de opgegeven sleutel, de naam van de vermelding en de waarde om de registervermelding te wijzigen.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

Notitie

Hoewel Set-ItemProperty de parameters Filter, Opnemen en Uitsluiten hebben, kunnen ze niet worden gebruikt om te filteren op eigenschapsnaam. Deze parameters verwijzen naar registersleutels, die itempaden zijn, en niet registervermeldingen, die itemeigenschappen zijn.

Een andere optie is het Reg.exe opdrachtregelprogramma te gebruiken. Voor hulp bij reg.exe typt reg.exe /? u bij een opdrachtprompt.

In het volgende voorbeeld wordt de vermelding Pad gewijzigd door het pad te verwijderen dat in het bovenstaande voorbeeld is toegevoegd. Get-ItemProperty wordt nog steeds gebruikt om de huidige waarde op te halen om te voorkomen dat de tekenreeks die wordt geretourneerd, moet worden geparseerd reg query. De methoden SubString en LastIndexOf worden gebruikt om het laatste pad op te halen dat is toegevoegd aan de vermelding Pad .

$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.

Nieuwe registervermeldingen maken

Als u een nieuwe vermelding met de naam PowerShellPath wilt toevoegen aan de CurrentVersion-sleutel , gebruikt New-ItemProperty u het pad naar de sleutel, de naam van de vermelding en de waarde van de vermelding. In dit voorbeeld wordt de waarde van de Windows PowerShell-variabele $PSHomegebruikt, waarin het pad naar de installatiemap voor Windows PowerShell wordt opgeslagen.

U kunt de nieuwe vermelding toevoegen aan de sleutel met behulp van de volgende opdracht en de opdracht retourneert ook informatie over de nieuwe vermelding:

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

Het PropertyType moet de naam zijn van een Microsoft.Win32.RegistryValueKind-opsommingslid uit de volgende tabel:

PropertyType-waarde Betekenis
Binary Binaire gegevens
Dword Een getal dat een geldige UInt32 is
ExpandString Een tekenreeks die omgevingsvariabelen kan bevatten die dynamisch worden uitgevouwen
MultiString Een tekenreeks met meerdere regels
String Elke tekenreekswaarde
QWord 8 bytes binaire gegevens

U kunt een registervermelding toevoegen aan meerdere locaties door een matrix met waarden op te geven voor de parameter Path :

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

U kunt ook een vooraf bestaande registervermeldingswaarde overschrijven door de parameter Force toe te voegen aan elke New-ItemProperty opdracht.

Registervermeldingen een andere naam geven

Als u de naam van de PowerShellPath-vermelding wilt wijzigen in 'PSHome', gebruikt u Rename-ItemProperty:

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

Als u de hernoemde waarde wilt weergeven, voegt u de parameter PassThru toe aan de opdracht.

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

Registervermeldingen verwijderen

Als u zowel de registervermeldingen PSHome als PowerShellPath wilt verwijderen, gebruikt u Remove-ItemProperty:

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath