# encoding: ascii
# api: powershell
# title: Get-RemoteRegistryChildI
# description: From Windows PowerShell Cookbook (O’Reilly) by Lee Holmes
# version: 0.1
# author: Lee Holmes
# license: CC0
# x-poshcode-id: 2162
# x-archived: 2016-03-18T21:22:11
# x-published: 2011-09-09T21:41:00
#
#
##############################################################################
##
## Get-RemoteRegistryChildItem
##
## From Windows PowerShell Cookbook (O'Reilly)
## by Lee Holmes (http://www.leeholmes.com/guide)
##
##############################################################################
<#
.SYNOPSIS
Get the list of subkeys below a given key on a remote computer.
.EXAMPLE
Get-RemoteRegistryChildItem LEE-DESK HKLM:\Software
#>
param(
## The computer that you wish to connect to
[Parameter(Mandatory = $true)]
$ComputerName,
## The path to the registry items to retrieve
[Parameter(Mandatory = $true)]
$Path
)
Set-StrictMode -Version Latest
## Validate and extract out the registry key
if($path -match "^HKLM:\\(.*)")
{
$baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(
"LocalMachine", $computername)
}
elseif($path -match "^HKCU:\\(.*)")
{
$baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(
"CurrentUser", $computername)
}
else
{
Write-Error ("Please specify a fully-qualified registry path " +
"(i.e.: HKLM:\Software) of the registry key to open.")
return
}
## Open the key
$key = $baseKey.OpenSubKey($matches[1])
## Retrieve all of its children
foreach($subkeyName in $key.GetSubKeyNames())
{
## Open the subkey
$subkey = $key.OpenSubKey($subkeyName)
## Add information so that PowerShell displays this key like regular
## registry key
$returnObject = [PsObject] $subKey
$returnObject | Add-Member NoteProperty PsChildName $subkeyName
$returnObject | Add-Member NoteProperty Property $subkey.GetValueNames()
## Output the key
$returnObject
## Close the child key
$subkey.Close()
}
## Close the key and base keys
$key.Close()
$baseKey.Close()