2017-02-14 9 views
-1

私はグーグルで何か役に立たないものは見つかりませんでした。プログラムがインストールされていることを確認します。次のpowershellに移動します。

インストールしたいファイルが4つありますが、そのうちのいくつかがコンピュータにインストールされているかどうか確認したいと考えています。

例: チェックプログラム1がインストールされている場合は、それをインストールし、に移動し、プログラム2 をインストールしない場合は、それがインストールされていない場合は、しかし、2をプログラムし、そこに同じテストを行うには、それをインストールして行きます。

Execute-MSI -Action Install -Path "$dirFiles\Program1" 
Execute-MSI -Action Install -Path "$dirFiles\Program2" 
Execute-MSI -Action Install -Path "$dirFiles\Program3" 
Execute-MSI -Action Install -Path "$dirFiles\Program4" 
+2

を助け

PS> $found = $results.Where({ $_.Name -like "*sw1*"}) PS> if ($found) { Write-Host "Found" } 

希望こんにちは、あなたはまだ_any_コードを書かれていますか?あなたを助けるためにそれを見る必要があります。それを含めるには[あなたの質問を編集する](http://stackoverflow.com/posts/42228400/edit)があります。 – sodawillow

+0

私はそれをしました。これにチェックを実装するにはどうしたらいいですか? – jetmanus

答えて

0

GUIDがわかっている場合は、uninstall keyのパスをテストできます。また、お使いのOSが64ビットの場合は、32ビットアプリの場合は同じキーがWOW6432Nodeにあることを忘れないでください。

$uninstallkey = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\" 
$uninstall32key = "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" 
#Example 64-bit app 
$app1guid = "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" 
if (!(Test-Path "$uninstallkey\$app1guid)) {Execute-MSI -Action Install -Path "$dirFiles\Program1"} 
#Example 32-bit app 
$app2guid = "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" 
if (!(Test-Path "$uninstall32key\$app2guid)) {Execute-MSI -Action Install -Path "$dirFiles\Program1"} 
+0

これは天才です非常にありがとうございます – jetmanus

0

あなたのアプリケーションについて何も知らずに、私が考えることができる2つの簡単なオプションがあります。

1)パターン/文字列を探してログファイルを読み、6回チェックし(必要に応じて設定する)、完了しなければ失敗します。それがない場合は、カウントは上記のような何かを行うことができますどのようなディレクトリが作成する、あるいはファイル数、わかっている場合は、次のと同じチェックをインストールしてください

 $LOGFILE = 'C:\Somewhere.log' 
    $Complete = 'no' 
    $Counter = 1 
    $max = 6 

Start-Sleep 10 

    DO { 

    $Check = SELECT-STRING -pattern 'status: 0.' -path $logfile -quiet 
    write-host $Check 
    If (($Check) -eq $True) { 
    Set-Variable -name Complete -Value "yes" 
     } 
      Else {Set-Variable -name Complete -Value 'no'} 
       Write-host $Counter 
       Start-Sleep 20 
       $Counter++ 
          } 

      while ($Complete -eq 'no') 

       If (($Counter) -eq $max) { 

    Throw 'Installation failed, check the error log' 

     } 

オプション2)

に移動ファイルの読み込みの代わりに

$PRDIR = "D:\Folder" 
    If (($PRDIR.Count) -gt 2) 
    { 
Do something 
} 
Else 
{ 
Do something else 
{ 

希望に役立ちます!

R

0

あなたのMSIがインストールされているかどうか確認するためにWMIを使用することができます。例:

$products = Get-WmiObject -Class win32_product | Where-Object { $_.Name -like "*someName*" } | Select-Object * 

あなたが(例えば$_.Name -like "*Sw1*" -or $_.Name -like "*Sw2*"経由)を照会するために、追加のパターンでWhere-Object句を拡張することがあります。 $productsは結果を含む配列でなければなりません。要求されたSWがインストールされているかどうかを確認するために使用できます。例:

+0

'Win32_Product'は、すべてのMSIで修復を実行すると呼び出されるたびに注意してください。だから、少なくともそれは一般的に本当に遅いです。 – BenH

関連する問題