powershell - 如何在PowerShell中按名称和值过滤注册表项下的名称/值对?

标签 powershell registry powershell-3.0

我正在尝试了解在PowerShell中使用的成语。

鉴于此脚本:

$path = 'hkcu:\Software\Microsoft\Windows\CurrentVersion\Extensions'
$key = Get-Item $path
$key

我在这个问题的底部得到了输出。

我想获取属性(在$key下的名称/值对)的输出,在这里我可以同时过滤名称和值。

例如,过滤以列出所有具有以下内容的扩展:
  • 名称类似于xls*
  • 或类似*\MSACCESS.EXE的值

  • 或排除过滤器:排除所有名称,例如doc*
    通过第一个过滤器,我想要这样的结果:
    Name                           Value                                                                                                                                                       
    ----                           --------                                                                                                                                                       
    xlsx                           C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
    xls                            C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
    mdb                            C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE                                                                                                              
    mda                            C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE                                                                                                              
    

    这是脚本的原始输出:
    Hive: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
    Name                           Property                                                                                                                                                       
    ----                           --------                                                                                                                                                       
    Extensions                     rtf  : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.rtf                                                                                                         
                                   dot  : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dot                                                                                                         
                                   dotm : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dotm                                                                                                        
                                   dotx : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dotx                                                                                                        
                                   docm : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.docm                                                                                                        
                                   docx : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.docx                                                                                                        
                                   doc  : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.doc                                                                                                         
                                   xlsx : C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
                                   xls  : C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
                                   mdb  : C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE                                                                                                              
                                   mda  : C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE                                                                                                              
    

    编辑

    我解决了部分问题:获取名称/值对的列表。它使用PSCustomObject:
    $namevalues = $key.GetValueNames() | ForEach-Object { [pscustomobject]@{ Name=$_; Value=$key.GetValue($_) } }
    $namevalues
    

    (我应该如何包装该代码?)

    过滤的任何帮助将不胜感激

    最佳答案

    有一种更聪明的方法来枚举注册表值(找到它here)。而且它是更强大的IMO。

    我把它变成了单线:

    (Get-ItemProperty $path).psobject.properties | 
       where {$_.name -like "xls*" -or $_.value -like "*\MSACCESS.EXE"} | 
          select name,value
    

    更新:如@ mklement0的注释中所述,您应该注意PSPath中的属性PSParentPathPSChildNamePSDrivePSProviderpsobject.properties

    关于powershell - 如何在PowerShell中按名称和值过滤注册表项下的名称/值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837876/

    相关文章:

    ruby - STDIN 和 Powershell - 如何使编码匹配?

    c# - 在 C# 中访问和使用 PowerShell 对象

    Powershell使用regsvr32远程注册COM dll

    c# - 如何在 Windows Xp 欢迎屏幕中添加指向网站的链接

    datetime - 文件日期元数据无法正确显示

    powershell-3.0 - 如何在管道后使用 "-join"命令

    windows - PowerShell,不包含方法 'items'

    powershell - 在 Powershell 脚本中获取 IIS 的应用程序池标识

    c# - WebRequest.Create 抛出 IOException "The specified registry key does not exist."

    powershell - 导入注册表(.reg)文件失败