如何检查应用程序是否安装在多台服务器上 - PowerShell

问题描述:

$comps = get-content C:\xyz\test.txt 
foreach($comp in $comps) 
{ 
$result = Get-WmiObject -Class Win32_Product -Computer $comp | sort-object Name | select Name | where { $_.Name -match “abc”} 
$result | out-file -Append out.txt 
} 

有一个应用程序abc,即时通讯寻求知道这是否安装在多个服务器。如何检查应用程序是否安装在多台服务器上 - PowerShell

+0

您发布的代码以何种方式执行您期望的操作? – arco444

+1

请注意'Win32_Product'调用它验证/修复每个安装的msi。所以至少它是缓慢和过程密集型的。 – BenH

+0

请提出任何其他替代方案.. – NJones

选中此“嗨脚本专家”link。此链接描述如何通过注册表查询已安装的应用程序。

link

的Win32_Product:黄金三镖客 [好]的的Win32_Product WMI类代表,因为他们安装的产品> Windows安装程序。

如果您选择使用Get-WmiObject查询Win32_Product类,您会发现>自己[Bad]正在等待您的查询(或应用程序)返回[Ugly]>一致性检查,因为它已安装尝试验证和修复安装。 (有关更多信息,请参阅事件日志消息指示> Windows安装程序重新配置所有安装的应用程序)。 ...

基于上面的链接,您可以通过查询您安装的产品:

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize 

此外,您可以使用Test-Path检查请求的注册表项存在。例如:

if (test-path HKLM:\Software\abc) { write-host "Found" } else { Write-Host "Not found" } 

要检查安装的软件在多个服务器上:

$servers = Get-Content C:\xyz\servers.txt 
$results = @() 
foreach ($server in $servers) { 
    $session = New-PSSession -ComputerName $server -Credential (Get-Credential) 
    $results += Invoke-Command -Session $session -ScriptBlock { 
     test-path HKLM:\Software\abc 
    } 
} 

$results.GetType() # Dump type 
$results | gm # Dump properties 

$results | Format-Table 

希望有所帮助。

+0

是否有任何最好的选择,而不是使用wmi ..我们可以从注册表中获取此? – NJones

+0

是的,我在上面的答案中添加了一行。 – Moerwald

+0

我的应用程序在HKLM \ Software \ abc下。我想要在软件下的abc ..请帮助 – NJones