-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

インストールされているすべてのmsiを確認/修復する 'Win32_Product'呼び出しには注意してください。だから、それは遅く、プロセス集中的です。 – BenH

+0

他の代替案を提案してください。 – NJones

答えて

0

「Hey Scripting Guy」linkを確認してください。このリンクは、レジストリを介してインストールされたアプリケーションを照会する方法について説明しています。 linkから

Win32_Productの:続・夕陽のガンマン [良い] Win32_ProductのWMIクラスは、Windowsインストーラによってそれらがインストールされているなどの製品を>表します。

Get-WmiObjectを使用してWin32_Productクラスをクエリすることを選択した場合、クエリ(またはアプリケーション)がそのパッケージとしてインストールされているパッケージの一貫性チェックを返すのを待っています。インストールの確認と修復を試みます。詳細については、「Windows Installerがインストールされているすべてのアプリケーションを再設定したことを示すイベントログメッセージ」を参照してください。 ...あなたが経由でインストールされた製品を照会することができます上記のリンクに基づいて

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

はい、私は上記の答えで1つのライナーを追加しました。 – Moerwald

+0

私のアプリケーションはHKLM \ Software \ abcの下にあります。私はソフトウェアの下のabcにしたいです..plsヘルプ – NJones

関連する問題