如何使用添加的 SPECIFIC-WORD 过滤器来获取itemproperty?

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

我发现 WMIC 无法获取所有已安装的软件,因为它从某些特定/默认注册表中获取信息作为唯一信息,并且该注册表本身并不包含控制面板上显示的软件的完整列表。

我发现这个 Powershell 命令行确实可以找到 wmic 列出和未列出的已安装软件:

Get-ItemProperty HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName, DisplayVersion, InstallDate

但是,我需要在该行添加一个 FILTER (很抱歉,我对 Powershell 不太了解)来过滤特定名称,即“Teamv”,所以它只向我显示 start/ 的软件包含这个词,这样我就可以知道该软件是否安装了。

如果(如果)还存在一种从单词列表中获取单词的方法(假设您想了解更多已安装的软件,即 Teamviewer、Kaspersky 和 Logmein),那就太棒了!!

感谢您的帮助! =)

powershell filter wmic
1个回答
1
投票

PowerShell 提供

Where-Object
cmdlet 用于过滤对象列表 - 无论是整体还是按属性值:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | 
  Where-Object DisplayName -match 'Teamviewer|Kaspersky|LogMeIn' |
  Select-Object DisplayName, DisplayVersion, InstallDate

注:

  • 以上,由于仅涉及单个比较操作,因此能够采用简化语法;也就是说,

    Where-Object DisplayName -match 'Teamviewer|Kaspersky|LogMeIn'
    是以下基于脚本块的形式(
    { ... }
    )的简化形式,其中必须通过自动
    $_
    变量
    引用管道输入对象;对于更复杂的条件,您需要此形式:

    Where-Object { $_.DisplayName -match 'Teamviewer|Kaspersky|LogMeIn' }
    
  • 也就是说,使用

    .DisplayName 运算符将每个管道输入对象的 
    'Teamviewer|Kaspersky|LogMeIn'
    属性值与 regex(正则表达式)
    -match
    进行比较。

    • 仅当比较产生
      $true
      时,才会传递(输出)当前的输入对象(可能通过类型强制;此处,
      -match
      直接返回
      $true
      $false
    • 注释
      -match
      • 默认情况下它会查找 substrings,并且交替构造 (
        |
        ) 使其查找三个字符串中的 any;可以使用额外的正则表达式构造(例如
        ^
        仅在输入字符串的 start 处匹配),以进一步约束匹配逻辑。
      • 默认情况下不区分大小写,就像 PowerShell 通常那样;使用 -cmatch 变体进行区分大小写的
         匹配。
© www.soinside.com 2019 - 2024. All rights reserved.