Read registry settings recursively with Powershell

10,820

You can loop through the properties. Using your idea that would be:

foreach ($a in $registry) {
    $a.Property | ForEach-Object {
        Write-Output $_
        Write-Output $a.GetValue($_)
    }
}

Output:

InstallDir
C:\Program Files\Common Files\Apple\Apple Application Support\
UserVisibleVersion
4.1.1
Version
4.1.1
....

That's pretty messy though. The usual way to output data like this in powershell is to create an object with properties for Name and Value so you have one object per registry-value. This is easier to process (if you're going to use it for something in the script) and easier to look at in console.

foreach ($a in $registry) {
    $a.Property | Select-Object @{name="Value";expression={$_}}, @{name="Data";expression={$a.GetValue($_)}}
}

or

foreach ($a in $registry) {
    ($a | Get-ItemProperty).Psobject.Properties |
    #Exclude powershell-properties in the object
    Where-Object { $_.Name -cnotlike 'PS*' } |
    Select-Object Name, Value
}

Output:

Value                 Data
-----                 ----
InstallDir            C:\Program Files\Common Files\Apple\Apple Application Support\
UserVisibleVersion    4.1.1
Version               4.1.1
....
Share:
10,820
timmalos
Author by

timmalos

Updated on June 05, 2022

Comments

  • timmalos
    timmalos almost 2 years

    I'm trying to read recursively some registry settings with Powershell. This is what I tried:

    $registry = Get-ChildItem "HKLM:\Software\Wow6432Node\EODDashBoard\moveFilesOverflow" -Recurse
    Foreach($a in $registry) {
        Write-Output $a.PSChildName
        $subkeys = (Get-ItemProperty  $a.pspath)
        Write-Output $subkeys.LastDateTime_EndScript
    
    }
    

    I would like to be able to list all the registry keys with their value, without knowning the registry keys.

    With my script I have a variable $subkeys that contains objects I can access. (For example here I can access $subkeys.LastDateTime_EndScript)

    However what I would like is to list all the registry keys with their value without knowing the registry keys in my script, ie something like this:

    Foreach ($subkey in $subkeys) {
        Write-Output $subkey.keyname
        Write-Output $subkey.value
    }
    

    Is it possible? Thanks,