Functions/Get-RegistryValue.ps1
function Get-RegistryValue { <# .SYNOPSIS Get the values from a specified registry key .DESCRIPTION Get the values from a specified registry key. Registry keys can begin either with the 4 letter abbreviations or fully spelled out. ExpandString (aka REG_EXPAND_SZ) are NOT expanded. .PARAMETER RegistryKey The full registry key. Values can actually be copied from regedit.exe in the address bar. .PARAMETER IncludeInput Changed name from -IncludeRegistryKey to be consistent, aliased to 'IncludeRegistryKey' for backward compatibility .EXAMPLE Get-RegistryValue -RegistryKey 'HKEY_CURRENT_USER\Environment' Name Type Value ---- ---- ----- Path ExpandString %USERPROFILE%\AppData\Local\Microsoft\WindowsApps; TEMP ExpandString %USERPROFILE%\AppData\Local\Temp TMP ExpandString %USERPROFILE%\AppData\Local\Temp .EXAMPLE Get-RegistryValue 'HKCU\Control Panel\Cursors' -IncludeInput | Select-Object -Last 4 RegistryKey Name Type Value ----------- ---- ---- ----- HKCU\Control Panel\Cursors SizeWE String C:\WINDOWS\cursors\aero_ew.cur HKCU\Control Panel\Cursors UpArrow String C:\WINDOWS\cursors\aero_up.cur HKCU\Control Panel\Cursors Wait String C:\WINDOWS\cursors\aero_busy.ani HKCU\Control Panel\Cursors (Default) String Windows Default #> [CmdletBinding(ConfirmImpact='None')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter','')] param ( [Parameter(Mandatory,HelpMessage='Enter a registry key',Position=0)] [string] $RegistryKey, [Alias('IncludeRegistryKey')] [switch] $IncludeInput ) begin { Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]" } process { $key = Get-Item -Path "Registry::$RegistryKey" $key.GetValueNames() | ForEach-Object { $name = $_ if ($IncludeInput) { $rv = ([ordered] @{ RegistryKey = $RegistryKey Name = '' Type = '' Value = '' }) } else { $rv = ([ordered] @{ Name = '' Type = '' Value = '' }) } $rv.Name = $name $rv.Type = $key.GetValueKind($name).ToString() if ($rv.Type -eq 'ExpandString') { $rv.Value = $key.GetValue($name, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames) } else { $rv.Value = $key.GetValue($name) } if (-not $rv.name) { $rv.name = '(Default)' } New-Object -TypeName 'psobject' -Property $rv } } end { Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]" } } |