Delen via


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:

$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

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

  • String - Wordt gebruikt voor REG_SZ waarden. Geef een [System.String] object door aan de parameter Waarde .
  • ExpandString - Wordt gebruikt voor REG_EXPAND_SZ waarden. Geef een [System.String] object door aan de parameter Waarde . De tekenreeks moet niet-uitgevouwen verwijzingen bevatten naar omgevingsvariabelen die worden uitgebreid wanneer de waarde wordt opgehaald.
  • Binary - Wordt gebruikt voor REG_BINARY waarden. Geef een [System.Byte[]] object door aan de parameter Waarde .
  • DWord - Wordt gebruikt voor REG_DWORD waarden. Geef een [System.Int32] object door aan de parameter Waarde .
  • MultiString - Wordt gebruikt voor REG_MULTI_SZ waarden. Geef een [System.String[]] object door aan de parameter Waarde .
  • QWord - Wordt gebruikt voor REG_QWORD waarden. Geef een [System.Int64] object door aan de parameter Waarde .

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

$newItemPropertySplat = @{
    Name = 'PowerShellPath'
    PropertyType = 'String'
    Value = $PSHome
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
           'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat

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

In de volgende voorbeelden ziet u hoe u nieuwe registervermeldingen van verschillende typen maakt. De registerwaarden worden gemaakt in een nieuwe sleutel met de naam MySoftwareKey onder HKEY_CURRENT_USER\Software. De $key variabele wordt gebruikt om het nieuwe sleutelobject op te slaan.

$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

U kunt de PSPath-eigenschap van het sleutelobject in volgende opdrachten gebruiken.

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

U kunt ook doorsluisen $key om New-ItemProperty een waarde aan de sleutel toe te voegen.

$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

Als u de inhoud van $key de items weergeeft, worden de nieuwe items weergegeven.

$key
    Hive: HKEY_CURRENT_USER\Software

Name                           Property
----                           --------
MySoftwareKey                  DefaultFolders : {Home, Temp, Publish}
                               MaxAllowed     : 1024
                               BinaryDate     : {51, 49, 45, 74…}

In het volgende voorbeeld ziet u het waardetype voor elk type registervermelding:

$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…}

Registervermeldingen een andere naam geven

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

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat

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

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
    PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat

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