Powershell Get-ChildProperty可以获得REG QUERY等真正的注册表项列表而无需额外的噪音吗?

War*_* P 4 registry powershell

在Win2008R2上的PowerShell 2.0中,如果我想从注册表项获得相同的输出,"REG QUERY"将以可读的格式提供给我,使用来自特定注册表项的值,如下所示:

reg query hkcu\Software\Microsoft\CharMap

HKEY_CURRENT_USER\Software\Microsoft\CharMap
    Advanced    REG_DWORD    0x0
    CodePage    REG_SZ       Unicode
    Font        REG_SZ       Arial
Run Code Online (Sandbox Code Playgroud)

我如何使用PowerShell做到这一点?PowerShell的行为再一次使我神秘.

Get-ItemProperty示例:

Get-ItemProperty HKCU:\Software\Microsoft\CharMap


PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\CharMap
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft
PSChildName  : CharMap
PSDrive      : HKCU
PSProvider   : Microsoft.PowerShell.Core\Registry
Advanced     : 0
CodePage     : Unicode
Font         : Arial
Run Code Online (Sandbox Code Playgroud)

在我上面的设计示例中,我希望看到"高级","CodePage"和"字体",但不是任何PowerShell元数据(以PS开头的名称).遗憾地过滤名称"PS"对我来说不起作用,因为我并不真正尝试阅读MS Windows字符映射设置,我只是选择它们作为一个注册表项,可能每个人都有Windows,所以每个人都可以看到完全如此不同于使用PowerShell的经验是看一下注册表,相比之下说该REG.EXE程序.有理由说任何人可能想要从注册表项中获取注册表值而不获取任何元数据,并且任何在PowerShell中编写工具的人都可能想要执行这个简单的任务.

我希望输出类似REG QUERY但仍然是原生PowerShell格式,而不仅仅是扁平化为文本.我用谷歌搜索并搜索到了,似乎无法解决这个问题.

我希望能够做到这一点:

  $all = GetRealRegistryKeysFrom(  HKCU:\Software\Microsoft\CharMap )
  for ($item in $all) { ... }
Run Code Online (Sandbox Code Playgroud)

更新使用下面的功能,效果很好....

Get-RegistryKeyPropertiesAndValues -path HKCU:\Software\.....

CB.*_*CB. 5

这是一个诀窍:

Get-ItemProperty HKCU:\Software\Microsoft\CharMap  | out-string -stream | ? { $_ -NOTMATCH '^ps.+' }
Run Code Online (Sandbox Code Playgroud)

问题是当房产开始时PS.使用此代码,您可以详细说明以下内容:

PSPath
PSParentPath
PSChildName
PSDrive
PSProvider
Run Code Online (Sandbox Code Playgroud)

......在where子句中一个接一个.或者只是尝试使用

get-item hkcu\Software\Microsoft\CharMap
Run Code Online (Sandbox Code Playgroud)

有一个脚本可以满足您的需求.

更新转载的脚本:

Function Get-RegistryKeyPropertiesAndValues
{
  <#
    Get-RegistryKeyPropertiesAndValues -path 'HKCU:\Volatile Environment'
    Http://www.ScriptingGuys.com/blog
  #>

 Param(

  [Parameter(Mandatory=$true)]
  [string]$path)

 Push-Location
 Set-Location -Path $path
 Get-Item . |
 Select-Object -ExpandProperty property |
 ForEach-Object {
 New-Object psobject -Property @{"property"=$_;
    "Value" = (Get-ItemProperty -Path . -Name $_).$_}}
 Pop-Location
} #end function Get-RegistryKeyPropertiesAndValues
Run Code Online (Sandbox Code Playgroud)