Powershell 列出未通过 match 和 notmatch 安装的应用程序

Powershell list app which is not installed by match and notmatch

我想问一下如何使用正则表达式列出不是从数组安装的应用程序。下面是我的代码。

  1. 我想列出所有与 $programy_zjisteni 匹配的安装应用程序。有用吗
  2. 我想列出所有与 $programy_zjisteni 不匹配的非安装应用程序。不起作用。

也许我应该使用 soma 过滤器?或者?

感谢您的帮助。

$nainstalovane_programy = (Get-WmiObject -Class Win32_Product).name

#Programy, ktere kontroluji
$programy_zjisteni = @(
        "landesk.*Agent"
        "Logmanager Event Sender"
        )

$installed_programs = @()
$not_installed_programs = @()

foreach ($program in $nainstalovane_programy)
{
    foreach ($x in $programy_zjisteni)
    {
        if ($program -match $x)
        {
            $installed_programs += $program
        }
        else
        {
            $not_installed_programs += $program 
        }
    }
}

$installed_programs
$not_installed_programs

如果我没理解错的话,像这样的东西应该有用:

$nainstalovane_programy = (Get-WmiObject -Class Win32_Product).name

#Programy, ktere kontroluji
$programy_zjisteni = @(
        "landesk.*Agent"
        "Logmanager Event Sender"
        )

$installed_programs = $nainstalovane_programy | Where-Object {
    $program = $_
    $is_installed = @($programy_zjisteni | Where-Object { $program -match $_ }).Length -gt 0
    $is_installed
}

$not_installed_programs = $nainstalovane_programy | Where-Object {
    $installed_programs -notcontains $_
}

$installed_programs
$not_installed_programs

如果您确实希望 $not_installed_applications 成为不匹配任何已安装应用程序的模式列表,请尝试:

$not_installed_programs = $programy_zjisteni | Where-Object {
    $pattern = $_
    $is_not_installed = @($nainstalovane_programy | Where-Object { $_ -match $pattern }).Length -eq 0
    $is_not_installed
}