通过powershell枚举所有注册表值

问题描述 投票:0回答:2

我正在写一个powershell脚本,并遇到了一个问题。我有一个包含一个值的注册表项。我必须提取值的名称而不是它的值。为了更清楚一点,让我们考虑包含DWORD值[@ 10.105.1.1 = 64]的密钥。我希望能够提取值的名称,在本例中为10.105.1.1。我没有使用它所设置的值64。另请注意,我没有创建注册表项,并且值的名称因计算机而异,因为它更像是另一个系统使用的设置,我只是尝试访问设置数据。

powershell registry
2个回答
1
投票

您可以获取指定注册表项下的所有值,按值的数据进行筛选,然后获取值的名称。在下面的示例中,我列出了CurrentVersion键下的值,根据数据(游戏)过滤值并获取值名称(SM_GamesName)。此示例需要PSRemoteRegistry模块:

Import-Module PSRemoteRegistry
$key = 'SOFTWARE\Microsoft\Windows\CurrentVersion'

Get-RegValue -Hive LocalMachine -Key $key | 
Where-Object {$_.Data -eq 'games'} | 
Foreach-Object { $_.Value }

SM_GamesName

0
投票

我一直在寻找用脚本递归返回所有值。

# get-reg.ps1

Param($key)

Get-Item $key | foreach-object {
  $path = $_.PSPath
  $_.Property | foreach-object {
    $name = $_
    $data = get-itemproperty -literalpath $path -name $name |
      select -expand $name
    [pscustomobject]@{value=$name; data=$data; key=$path}
  }
}

Get-ChildItem -Recurse $key | foreach-object { # won't process top key
  $path = $_.PSPath
  $_.Property | foreach-object {
    $name = $_
    # there is a key named "*" under hklm:\software\classes
    $data = get-itemproperty -literalpath $path -name $name | 
      select -expand $name
    [pscustomobject]@{value=$name; data=$data; key=$path}
  }
}

PS C:\Users\js2010> .\get-reg hkcu:\key1

value     data     key
-----     ----     ---
value1    data1    Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\key1
(default) hi       Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\key1
value2    data2    Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\key1\key2
© www.soinside.com 2019 - 2024. All rights reserved.