iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Are you writing a PowerShell script that requires reading registry values? In this Itechguide, you’ll learn how to use PowerShell to read registry values.
How to Format Registry Paths for PowerShell
Before I teach you how to use PowerShell to read registry value, I want to teach you how to format registry paths to work with PowerShell.
Windows registry has 5 top-level keys (Root keys):
- HKEY_LOCAL_MACHINE
- HKEY_CURRENT_CONFIG
- HKEY_CLASSES_ROOT
- HKEY_USERS
- HKEY_CURRENT_USER
To read a registry value, you specify the key as a path in the Get-ItemProperty or Get-Item Cmdlets. There are 2 ways to format the registry path:
Free tools Windows power users keep installed
One-click scans. No signup required.
Method 1: Format with the Full Registry Key Path
Enter Registry:: followed by the full path to the registry. For example, to specify “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion“, I will use “Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion“
#1 Best Overall
- 1.1 GHz (boost up to 2.4GHz) Intel Celeron N5030 Quad-Core
Method 2: Format with the Abbreviated Registry Key Path
You could also enter the abbreviation of the top level registry key (root key), followed by a colon (:), then the full path to the registry key (without the root name).
As a reminder, here are the abbreviations for the root keys:
HKEY_LOCAL_MACHINE – HKLM
HKEY_CURRENT_CONFIG – HKCC
HKEY_CLASSES_ROOT – HKCR
HKEY_USERS – HKU
HKEY_CURRENT_USER – HKCU
Therefore, to specify the registry path, “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion” with this second method, it will written – “HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion“
How to Copy Registry Key Name
One more thing before I move on – it is better to copy the path to the registry key you want to read with PowerShell – instead of typing it manually.
To copy a registry key, right-click the key and select Copy Key Name. Here is an example.

Example 1: Return All Values in a Registry Key
To return all the values of a registry key, enter the command below and press enter.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
The command will return all the values in the specified path. The second screenshot below is the actual registry entry.
If you compare the PowerShell result and the registry values (second pane), they are exactly the same.


Example 2: Return a Specific Registry Key
Following on from the last section, the command in that section returned all values in the specified registry path. However, you can also use PowerShell to read registry value but return a specific value.
There are multiple ways to do this.
The last command (the Get-ItemProperty command) returned the values shown in the screenshot below.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11
To return the value CommonFilesDir, use one of the commands below:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty CommonFilesDir
The two commands return the the registry data, without the property name, CommonFilesDir. See the screenshot below:

Finally, for this sub-section, you can use PowerShell to read registry value and save the value in a variable. For example, we can save the registry data in the last command in a variable called $RegData.
Here is the modified command:
$RegData = Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty CommonFilesDir
Now, when you run the command, it will not return any result on the console because the result is saved in the variable…

However, to display the result saved in the variable, run the variable…
$RegData
Here is the result in PowerShell…

Example 3: Return Registry Subkey Name
The last command in the last last sub-section returned both the names of the registry keys and their Data.
However, sometimes you may want to display the Names without the Data. You can use the Get-Item Cmdlet to do this. See the command below…
Rank #2
- 256 GB SSD of storage.
- Multitasking is easy with 16GB of RAM
- Equipped with a blazing fast Core i5 2.00 GHz processor.
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
The command will return the Names of the registry keys without the accompanying Data column.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →
Example 4: Return Binary Data Registry Values
In this example, I want to display the binary value in the registry key, CaptionFont. This key is found in this registry path HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics.

The first step is to return the property of the CaptionFont key. However, before I do that, lets list all the properties in HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics.
$key = Get-Item "Registry::HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics"
The command returns a set of properties, including CaptionFont.

To return just the properties, pipe the above command to the Select-Object…
Get-Item "Registry::HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics" | Select-Object -ExpandProperty Property
This command displays all the properties in the list.

To display the CaptionFont (the 4th value in the array), update the command as shown below and save it in a variable…
$name = (Get-Item "Registry::HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics" | Select-Object -ExpandProperty Property)[3]
Then, to display the type of registry value (in this instance, REG_BINARY), call the GetValueKind Method in the original command saved in the $key variable. Then, use CaptionFont (saved in the $name) as the value in the Method.
Here is the command…
$Type = $key.GetValueKind($name)
The result, as expected is Binary.

Next, we read the values in the Binary registry type with the PowerShell command below…
$Value = $key.GetValue($name)
As you can see from the command, the value is retried by calling the GetValue Method in the original key saved in the $key variable. Then, using the name of the Property, CaptionFont in the Method.
The result is a bunch of numbers. To see this value in the registry, see the screenshot below.

Finally, to make it easy to list registry values, I created a PowerShell function called Get-RegistryData. To download the function, click download Get-RegistryData.zip
Once downloaded, unzip the file. Then, run the commands below:
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Unblock-File C:\Users\VictorA\Downloads\Get-RegistryData\Get-RegistryData\Get-RegistryData.ps1 Import-Module C:\Users\VictorA\Downloads\Get-RegistryData\Get-RegistryData\Get-RegistryData.ps1
To get the values or data in the keys on a registry path, run the command below.
Get-RegistryData -RegistryPath "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer"
The command displays the names of the keys, the registry path and type of the key.
Alternatively, if you don’t want to display certain headers, you can pipe Get-RegistryData to Select-Object.
Get-RegistryData -RegistryPath "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" | Select-Object name, type, data
With the command above, Get-RegistryData displays the Name, Type, and Data of each key in the specified registry path…
Recommended Free Tools
Example 5: Read Registry Value and Return an Array
To read registry key with PowerShell and return the value in an array, use the Get-ChildItem command.
Rank #3
- 14" diagonal, 1366x768 resolution, HD BrightView LED, Glossy NON-TOUCH Display
This registry key, HKEY_CURRENT_USER\Control Panel\Desktop has 3 subkeys. The command below returns all the sub-keys, their properties, and values:
$subkeys = Get-ChildItem "registry::HKEY_CURRENT_USER\Control Panel\Desktop"
These values are returned in an array. To confirm, run the command below…
$subkeys.GetType()
This command confirms that the data type in the last command, saved in the $subkeys variable is an array.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitches
Example 6: Get Registry Value if it Exists
The example in this sub-section is similar to all other examples in this guide with a minor exception. The slight modification here is to use Test-Path to check if the path exist.
Then, if the path exists, get its values with PowerShell. This simple script will check if the registry path, HKEY_CURRENT_USER\Control Panel\Desktop exists.
Then, if it exists, it will read its values with the Get-ItemProperty command.
If (Test-Path "Registry::HKEY_CURRENT_USER\Control Panel\Desktop")
{
Get-ItemProperty "Registry::HKEY_CURRENT_USER\Control Panel\Desktop"
}
Else {
write-host "The specified registry value does not exist."
}
The registry key, “Registry::HKEY_CURRENT_USER\Control Panel\Desktop” exists. So, the last command returned its values.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Let’s see if we specify a registry key that does not exist…
If (Test-Path "Registry::HKEY_CURRENT_USER\Control Panel\Desk")
{
Get-ItemProperty "Registry::HKEY_CURRENT_USER\Control Panel\Desk"
}
Else {
write-host "The specified registry value does not exist."
}
This time, the script executes the script in the Else block of the IF statement.
Example 7: Get and Compare Registry Values
As you may have figured, the Get-Item and Get-ItemProperty commands do not display the registry key types and data. So if you want to compare the data in a key, you have to find another way to do it.
In the “How To Use PowerShell To Read Registry Value And Return Binary Data” sub-section, I mentioned that I created a function called Get-RegistryData.
You can use this function to return the names, types and data of the sub-keys in a specified registry path.
For example, to return the names, types and data of all entries in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer, run the command below…
Get-RegistryData -RegistryPath "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer"
If we take it further, say I want to compare the value of the IconUnderline key with another value, I will proceed as outlined below.
- Pipe the output of the Get-RegistryData command into a Where-Object command and filter by Name equals IconUnderline.
Get-RegistryData -RegistryPath "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" | Where-Object {$_.Name -eq "IconUnderline"}
The last command shows that the current value in “IconUnderline” is 3.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minute- If I want to compare this value to another value, say 2, I will use the commands below. The first command saves the command in step 1 above to a variable.
$RegValue = Get-RegistryData -RegistryPath "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" | Where-Object {$_.Name -eq "IconUnderline"}
If ($RegValue.Value -ne 1) {Set-ItemProperty -Path $RegValue.Path -Name $RegValue.Name -Value 1}
The IF statement compares the current value in the registry key with 1. Then, if it is not equal to 1, it uses the Set-ItemProperty command to update the value to what you specify in the Value parameter.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Example 8: Get Registry Keys and Subkeys
There are two commands you can use to get registry keys and subkeys. You can use the Get-ItemProperty or the Get-ChildItem command.
The difference between the two commands is how you specify the registry path.
Rank #4
- 【Efficient Performance】 Powered by Intel Core i3 processor (2 cores, 4 threads, up to 3.4GHz) with 12GB RAM and 256GB SSD. Handles multitasking, office software, online classes, and HD video streaming smoothly. Integrated Intel UHD Graphics 620
- Backlit Keyboard & Complete Package】Comes with a cool backlit keyboard. Comes with awebcam, dual stereo speakers (8Ω/1.0W each), DC charger, and user manual – ready for late-night studying, online classes, video conferencing, and daily productivity
- 【Vibrant Display】 15.6-inch Full HD (1920x1080) anti-glare screen with 16:9 aspect ratio delivers crisp images and vivid colors – perfect for studying, watching lectures, or entertainment. Thin-bezel design maximizes viewing area
- 【Fast Connectivity & Expansion】 Equipped with WiFi 6 (802.11ax) and Bluetooth 5.2 for stable, high-speed wireless. Features 3 x USB 3.0, HDMI 2.1, Type-C (supports PD3.0 fast charging), and a TF card slot expandable up to 2TB – easily connect external monitors, mice, drives, or expand storage for all your files
- 【Long Battery Life & Portable】 Built-in 11.55V 5000mAh/57.75Wh high-capacity battery delivers approximately 7 hours of mixed-use battery life – enough for a full day of classes and assignments. Lightweight at just 1.63kg (3.6 lbs) and 19.5mm thin, plus a compact packing size – easily slips into a backpack for campus, library, or coffee shop
To use the Get-ItemProperty to get registry key and subkeys, add a back slash at the end of the registry path. Then, add the asterisk wildcard behind the backslash.
For example to the Get-ItemProperty to read keys and subkeys in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer, run the command below:
Get-ItemProperty "Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\*"
On the other hand, using the Get-ChildItem does not require adding any backslash and a wildcard. Here is an example with the Get-ChildItem command:
Get-ChildItem "Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer"
Both commands return the keys and subkeys in the specified registry path.
Example 9: Get a Registry Key’s LastWriteTime
While I was researching this article I found out that a lot of users are searching for how to use PowerShell to get the last time a registry key was updated.
However, during my research I also found out that there are no existing Cmdlets for this task. Additionally, it appears that the only solution is to create a custom PowerShell Function.
Fortunately, I found a function in superuser.com. So, I didn’t need to create mine!
To make it easy for www.itechguides.com readers, I have downloaded the Add-RegKeyLastWriteTime superuser.com function.
To download the function from www.itechguides.com, click download Add-RegKeyLastWriteTime.zip. Then, Unzip the downloaded zip file.
Finally, open PowerShell and run the commands below:
Unblock-File C:\Users\VictorA\Downloads\Add-RegKeyLastWriteTime\Add-RegKeyLastWriteTime\Add-RegKeyLastWriteTime.ps1 Import-Module C:\Users\VictorA\Downloads\Add-RegKeyLastWriteTime\Add-RegKeyLastWriteTime\Add-RegKeyLastWriteTime.ps1
Finally, to get the last write time of a registry key, run the command below:
Get-ChildItem HKCU:\ | Add-RegKeyLastWriteTime | Select Name, LastWriteTime
The command returns the last write time for all the subkeys in the HKEY_CURRENT_USER base registry key…
Example 10: Get Windows Registry Database Size
If you want to see the size of registry in Windows 10, run the command below:
Free tools Windows power users keep installed
One-click scans. No signup required.
Get-WmiObject -Class Win32_Registry
The command returns the Current and Max size of the registry database.

However, you can display additional results with an improved version of the command. I found a code that can do this in superuser.com.
The code by Markus (a superuser.com community contributor) displays additional information. Here is the code.
$data=Get-WmiObject -Class Win32_Registry -ErrorAction Stop
Format the results and write an object to the pipeline
$data | Select-Object -Property @{Name="Computername";Expression={$_._SERVER}}, Status, @{Name="Current Size (Mb)";Expression={$.CurrentSize}},
@{Name="Max Size (Mb)";Expression={$_.MaximumSize}},
@{Name="Free Size (Mb)";Expression={$_.MaximumSize - $_.CurrentSize}},
@{Name="Percent Free (%)";Expression={ (1 - ($_.CurrentSize/$_.MaximumSize))*100 }},
@{Name="Created";Expression={$_.ConvertToDateTime($_.InstallDate)}},
@{Name="Age";Expression={(Get-Date) - ( $_.ConvertToDateTime($_.InstallDate)) }}
And the result in PowerShell…

Conclusion
Reading registry values is an essential part of PowerShell coding and in this guide, I have explained various ways to do this.
Recommended Free Tools
Let me know your thoughts about this guide by responding to the “Was this page helpful?” question below.
Finally, for more PowerShell Itechguides, visit our Windows PowerShell how-to page.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.


I’m wondering if there is a way to reimage my laptop using my iPhone or iPad. Thank you!