Met registervermeldingen werken
Omdat registergegevens eigenschappen van sleutels zijn en daarom niet rechtstreeks kunnen worden gebladerd, moeten we een iets andere benadering gebruiken wanneer we er mee werken.
Registervermeldingen
Er zijn veel verschillende manieren om registergegevens te onderzoeken. De eenvoudigste manier is om de eigenschapsnamen op te halen die aan een sleutel zijn gekoppeld. Als u bijvoorbeeld de namen van de vermeldingen in de registersleutel wilt HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion zien, gebruikt u Get-Item . Registersleutels hebben een eigenschap met de algemene naam 'Eigenschap' die een lijst met registergegevens in de sleutel is.
Met de volgende opdracht selecteert u de eigenschap Eigenschap en vouwt u de items uit zodat ze in een lijst worden weergegeven:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId
Als u de registergegevens in een meer leesbare vorm wilt weergeven, gebruikt u Get-ItemProperty :
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
FTWARE\Microsoft\Windows
PSChildName : CurrentVersion
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
DevicePath : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir : C:\Program Files
CommonFilesDir : C:\Program Files\Common Files
ProductId : 76487-338-1167776-22465
WallPaperDir : C:\WINDOWS\Web\Wallpaper
MediaPath : C:\WINDOWS\Media
ProgramFilesPath : C:\Program Files
PF_AccessoriesName : Accessories
(default) :
De Windows PowerShell-gerelateerde eigenschappen voor de sleutel hebben allemaal het voorvoegsel 'PS', zoals PSPath, PSParentPath, PSChildName en PSProvider.
U kunt de *.* notatie gebruiken om te verwijzen naar de huidige locatie. U kunt gebruiken Set-Location om eerst naar de registercontainer CurrentVersion te gaan:
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
U kunt vervolgens 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 voor krijgen HKLM:\SOFTWARE\Microsoft\Windows\Help met behulp van Get-ItemProperty -Path ..\Help .
Eén registerinvoer 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 in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion gevonden.
Gebruik met de parameter Path om de naam van de sleutel op te geven en de parameter Name om de naam van de Get-ItemProperty DevicePath-vermelding op te geven.
Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
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
DevicePath : C:\WINDOWS\inf
Met deze opdracht worden de standaardeigenschappen Windows PowerShell evenals de eigenschap DevicePath.
Notitie
Hoewel Get-ItemProperty de parameters Filter, Include en Exclude heeft, kunnen ze niet worden gebruikt om te filteren op eigenschapsnaam. Deze parameters verwijzen naar registersleutels. Dit zijn itempaden en geen registeritems. Dit zijn itemeigenschappen.
Een andere optie is om het opdrachtregelprogramma Reg.exe te gebruiken. Voor hulp bij reg.exe typt u reg.exe /? bij een opdrachtprompt. Als u de DevicePath-vermelding wilt vinden, gebruikt reg.exe zoals wordt weergegeven 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 een aantal registergegevens te vinden, hoewel deze methode niet werkt met grote binaire gegevens of met registernamen die tekens zoals backslash () \ bevatten. De naam van de eigenschap toevoegen aan het itempad met een \ scheidingsteken:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Eén registerinvoer 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\Environment wijzigt. Met de vermelding Pad geeft u aan waar uitvoerbare bestanden moeten worden gevonden.
- Haal de huidige waarde van de vermelding Pad op met behulp van
Get-ItemProperty. - Voeg de nieuwe waarde toe en scheid deze door een
;. - Gebruik
Set-ItemPropertymet de opgegeven sleutel, invoernaam en waarde om de registerinvoer 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, Include en Exclude heeft, kunnen ze niet worden gebruikt om te filteren op eigenschapsnaam. Deze parameters verwijzen naar registersleutels( itempaden en geen registeritems) die itemeigenschappen zijn.
Een andere optie is om het opdrachtregelprogramma Reg.exe te gebruiken. Voor hulp bij reg.exe typt u reg.exe /? 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-ItemPropertywordt nog steeds gebruikt om de huidige waarde op te halen om te voorkomen dat de tekenreeks die wordt geretourneerd door 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 registergegevens maken
Als u een nieuwe vermelding met de naam PowerShellPath wilt toevoegen aan de CurrentVersion-sleutel, gebruikt u met het pad naar de sleutel, de naam van de vermelding en de waarde New-ItemProperty van de vermelding. In dit voorbeeld nemen we de waarde van de variabele Windows PowerShell , waarmee het pad naar de installatiemap voor de $PSHome Windows PowerShell.
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
PropertyType moet de naam zijn van een Microsoft.Win32.RegistryValueKind-enumeratielid uit de volgende tabel:
| PropertyType-waarde | Betekenis |
|---|---|
| Binair | Binaire gegevens |
| Dword | Een getal dat een geldige UInt32 is |
| ExpandString | Een tekenreeks die omgevingsvariabelen kan bevatten die dynamisch worden uitgebreid |
| MultiString | Een tekenreeks met meerderelines |
| Tekenreeks | Elke tekenreekswaarde |
| QWord | 8 bytes aan binaire gegevens |
Notitie
U kunt een registerinvoer 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 bestaande registerinvoerwaarde overschrijven door de parameter Force toe te voegen aan een New-ItemProperty opdracht.
De naam van registergegevens wijzigen
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 naam van de 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
Registergegevens verwijderen
Als u zowel de registergegevens 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