Sådan henter du registreringsværdier ved hjælp af PowerShell
At håndtere registreringsværdier i Windows føles ofte som at forsøge at afkode et fremmed sprog. Nogle registreringsnøgler er skjult bag lag af kompleksitet, og det er ikke altid nok bare at vide, hvad der skal køres i PowerShell – især hvis du fejlfinder eller automatiserer ting. Det er lidt irriterende, når kommandoerne til at hente disse værdier ikke helt fungerer, som du ville forvente, eller kaster fejl, du ikke forstår. Så denne guide er stort set en samling af måder, jeg har fundet nyttige til at udtrække registreringsoplysninger pålideligt, selv når tingene virker mærkelige. Efter at have rodet rundt med disse metoder, kan du verificere, forespørge eller bare kigge på registreringsposter uden hovedpine. Nøglen er at forstå, hvornår og hvorfor hver metode virker – for nogle gange er den enkleste kommando den, der fejler, og du er nødt til at skifte taktik. Forvent at få et klarere indblik i registreringsstrukturen, hvilket kan hjælpe, hvis du prøver at deaktivere opstartselementer, kontrollere installationstilstande eller bare fejlfinde noget mærkelig Windows-adfærd.
Sådan får du registreringsnøgleværdier i PowerShell uden at miste dit sind
Teststi – Er den registreringssti overhovedet der?
Denne del er ret simpel, men super nyttig. Windows PowerShells Test-Pathkommandolinje er som en første kontrol for at se, om en registreringsdatabasenøgle eller -værdi findes, før man prøver at gøre noget kompliceret. Den er fantastisk til scripting, især til fejlhåndtering. Grundlæggende kører du en kommando som Test-Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run, og hvis nøglen er der, får du $true. Hvis den mangler, får du $false. Nogle gange indeholder stien mellemrum eller mærkelige tegn, så hold stien i dobbelte anførselstegn: Test-Path "HKLM:\Some\Really Weird Path". Jeg har set tilfælde, hvor en sti teknisk set er korrekt, men PowerShell spytter $false ud på grund af manglende tilladelser eller slåfejl. Det er stadig et solidt første skridt til at undgå at få dit script til at gå ned eller køre kommandoer på ikke-eksisterende nøgler. På nogle opsætninger er det lidt ustabilt, men generelt hjælper det med at holde tingene ryddelige.
Test-RegistryValue — Er den værdi, du ønsker, virkelig der?
Det er ikke altid så ligetil at kontrollere en specifik værdi i registreringsdatabasen som at finde en sti – nogle gange handler det om, hvorvidt en bestemt streng eller et tal er gemt i nøglen. Funktionen nedenfor (som du kan kopiere eller justere) hjælper med at bekræfte dette. Grunden til, at det virker, er, at den forsøger at hente en bestemt egenskab (som et opstartselement eller et konfigurationsflag) og derefter fortæller dig, om den er til stede. Det er nyttigt, hvis du f.eks.prøver at sikre dig, at et bestemt program er indstillet til at køre ved login, eller at et funktionsflag er aktiveret. Syntaksen ser sådan ud:
Function Test-RegistryValue ($regkey, $name) { if (Get-ItemProperty -Path $regkey -Name $name -ErrorAction Ignore) { $true } else { $false } }
Så erstat $regkeymed din registreringssti, f.eks.HKCU:\Software\YourApp, og $namemed den specifikke værdi, du leder efter, f.eks.Enabled. På én maskine virker dette muligvis med det samme; på en anden kræver det måske nogle sudo/admin-rettigheder. Det er lidt mærkeligt, men normalt vil du blive overrasket over, hvor ofte denne lille kontrol sparer en masse hovedpine, når du skriver scripts eller foretager fejlfinding.
Reg Query — Kommandolinje og PowerShell, endelig sammen
Hvis PowerShell-kommandoer ikke er nok, eller du foretrækker den gammeldags metode, reg queryer det stadig praktisk. Det er et kommandolinjeværktøj, der dumper indholdet af en registreringsnøgle, hvilket gør det perfekt til hurtige kontroller eller scripting fra batchfiler. Når du kører noget som reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run", viser det alle opstartselementerne under den pågældende nøgle. Tricket er at huske at køre PowerShell eller Kommandoprompt som administrator nogle gange, især hvis tilladelser blokerer adgang. Du kan også pakke det ind i PowerShell ved at gøre det, Invoke-Expression 'reg query...'hvis det er nødvendigt. Det er lidt gammeldags, men super pålideligt til at få en kæmpe liste eller bare bekræfte, at en nøgle eller værdi er konfigureret korrekt.
Get-Item og dets venner — PowerShells kraft til adgang til registreringsdatabasen
Stor fan af Get-Itemog Get-ItemProperty, fordi de er en mere menneskelig måde at rode rundt i registreringsdatabasen på. To primære måder at hente værdier på: Get-ItemPropertyValue og Get-ChildItem. De giver forskellige smagsvarianter af information, men begge er solide valg.
Get-ItemPropertyValue — Nemt og præcist
Denne kommando er som at bede om et specifikt stykke data: “Hey, hvad er værdien af denne registreringsdatabasepost?” Hvis du for eksempel vil have Chromium- opstart, skal du køre:
Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run -Name Chromium
Hvis værdien i registreringsdatabasen findes, spytter kommandoen dens indhold ud. Hvis ikke, kaster den en fejl, medmindre du håndterer den med -ErrorAction. Jeg har brugt dette, når jeg bare vil have værdien hurtigt, uden at grave mig igennem en masse undernøgler.
Get-ChildItem — Vis alle i en registreringsdatabasenøgle
Dette er godt til at få en komplet liste over undernøgler eller værdier i en bestemt sti i registreringsdatabasen. Det fungerer som en mappeliste, men for registreringsdatabasen. Kør det sådan her:
Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion
Har du brug for at indsnævre det? Du kan tilføje parametre eller filtrere med -Nameeller -Exclude. For eksempel for at ignorere poster, der starter med C: Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion -Exclude C*. Ser lidt pænere ud end rå reg-forespørgselsoutput, og på nogle systemer er det lettere at fortolke.