有没有办法检查一个程序是否只通过文件名安装在powershell中?

qoefvg9y  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(127)

我正在尝试创建一个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
先谢谢你。

8tntrjer

8tntrjer1#

因此,我看到的问题,我想你问的是,安装程序的文件名将是不同的软件名称,你拉出来的注册表。与差异,这将是很难匹配的准确。
MSI和/或EXE(安装程序)的集合是否为已知的静态集合?是否可以在注册表名称和安装程序名称之间建立哈希表(字典)Map?
这将使得在安装程序中循环并从注册表对阵列执行.Contains时更容易进行精确匹配。

相关问题