0

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

4

2 回答 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
于 2012-07-03T07:51:34.047 回答
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
于 2018-09-03T02:11:13.873 回答