-1
$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

回答

0

選中此「嗨腳本專家」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

相關問題