匹配两个列表并使用 Powershell 查找卸载字符串

Matching two lists and find uninstall string with Powershell

我的脚本有问题。 我想制作一个脚本,列出在特定注册表路径中找到的软件 并查看此软件是否等于已安装的软件。如果是这样,它应该输出卸载字符串。 但现在它无法正常工作。它永远不会告诉我我想要的输出,即使它相似。例如,我将程序 Git 作为品牌,在软件中我得到了 Git 版本 2.26.2,但是当我选择 git.

时它不会输出卸载字符串

我的代码是:

$branding = Get-ChildItem "HKLM:\Software\DLR\Branding" | Get-ItemProperty | Select-Object -expandProperty ProgramName
$software = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Select-Object -ExpandProperty DisplayName

ForEach ($brandinglist in $branding) {
    $objCombobox.Items.Add("$brandinglist")
}

$objComboBox_SelectedIndexChanged=
{
    $selectme = $objCombobox.SelectedItem
    Write-Host $selectme
    if ("$selectme" -like "*$software*") {
        $uninstall = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,     HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object {$_.DisplayName -match "$electme" } | Select-Object -Property UninstallString
        Write-Host "$uninstall"
    }
}

您正在尝试 -like 比较错误,您将所选项目与一组显示名称进行比较,但这种方式行不通。

此外,没有理由两次使用几乎相同的代码来获取卸载字符串和显示名称。

尝试

# get a string array of program names
$branding = Get-ChildItem -Path 'HKLM:\Software\DLR\Branding' | Get-ItemProperty | Select-Object -ExpandProperty ProgramName

$regPaths = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
# get an object array of DisplayName and UninstallStrings
$software = Get-ChildItem -Path $regPaths | Get-ItemProperty | Select-Object DisplayName, UninstallString

# fill the combobox with the (string array) $branding
$objCombobox.Items.AddRange($branding)

$objComboBox.Add_SelectedIndexChanged ({
    $selectme = $objCombobox.SelectedItem
    Write-Host $selectme
    # get the objects that have a displayname like the selected item and write out the matching Uninstall strings
    $software | Where-Object {$_.DisplayName -like "*$selectme*" } | ForEach-Object {
        Write-Host $_.UninstallString
    }
})