我正在尝试创建一个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
先谢谢你。
1条答案
按热度按时间8tntrjer1#
因此,我看到的问题,我想你问的是,安装程序的文件名将是不同的软件名称,你拉出来的注册表。与差异,这将是很难匹配的准确。
MSI和/或EXE(安装程序)的集合是否为已知的静态集合?是否可以在注册表名称和安装程序名称之间建立哈希表(字典)Map?
这将使得在安装程序中循环并从注册表对阵列执行
.Contains
时更容易进行精确匹配。