【问题标题】:is there a way to check if a program is installed just by filename in powershell?有没有办法检查程序是否仅通过 powershell 中的文件名安装?
【发布时间】:2022-11-23 09:32:52
【问题描述】:

我正在尝试创建一个 powershell 脚本以在目录中自动安装所有 .msi 和 .exe 文件。但是,在执行此操作时,我想检查是否已安装任何程序。

我知道我可以像下面这样在系统中获取所有已安装的文件

$32bit_softwares = Get-ItemProperty HKLM:\SOFTWARE\wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
                        Select-Object DisplayName,DisplayVersion,Publisher,InstallDate
                        
$64bit_softwares = Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* |
                        Select-Object DisplayName,DisplayVersion,Publisher,InstallDate
$all_softwares = $32bit_softwares+$64bit_softwares

    

我可以获得目录中文件的文件名,如下所示:

$directoryRead = Read-Host -Prompt "enter directory"
$fileNames = Get-ChildItem $directory -Recurse -include *.exe,*.msi | ForEach-Object {$_.name}

我如何在循环中比较这两个?喜欢

$all_softwares.DisplayName -like "$softwareName*"

我不确定上面的类似过滤器是否可以完成工作,因为文件名将类似于 examplename.exe

提前致谢。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    所以我看到的问题和我想你问的是安装程序文件名将不同于你从注册表中提取的软件名称。由于差异,很难完全匹配。

    MSI 和/或 EXE(安装程序)的集合是已知的静态集合吗?是否可以在注册表名称和安装程序名称之间设置哈希表(字典)映射?

    这将使在遍历安装程序和在注册表中对阵列执行 .Contains 时更容易进行精确匹配。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      相关资源
      最近更新 更多