3

私は、WindowsサーバーへのWebsphereMQクライアント32ビットのサイレントインストールを最初に開始するスクリプトを作成するタスクに遭遇しました。次に、インストールが成功したかどうかを確認します.....そこで、次のスクリプトを作成しました。

  @echo off
  REM Author : Akshay Sinha
  REM Date Created : 07/05/2012
  REM Installing Websphere MQ.......
  Msiexec /q /i "%CD%\MSI\IBM WebSphere MQ.msi" /l*v .\install.log /m mif_file             TRANSFORMS="1033.mst" AGREETOLICENSE="yes"
  echo Script to check if the installation failed !!!
  echo Waiting for installaion to complete.......
  REM Script will wait for 2 mins, This is to ensure that install.log gets fully             generated.
  ping 123.45.67.89 -n 1 -w 120000 > nul
  echo Wait Over
  find /C "Installation operation failed" "%CD%"\install.log > tmp.log
  for /f "tokens=1,2,3 delims=:" %%a in (tmp.log) DO (
  SET /a FOUND_STR=%%c
  echo %FOUND_STR%
  )
  del tmp.log
  SET %FOUND_STR%=%FOUND_STR: =%
  echo %FOUND_STR%
  if %FOUND_STR% EQU 0 (
  echo Installation Of MQ completed without any errors!!!!!
  EXIT /B 0
  )
  if %FOUND_STR% GTR 0 (
  echo There were errors while installing MQ.. Pls Verify!!!
  EXIT /B 1
  )

スクリプトは、新規インストールで正常に機能しています。つまり、上記のソフトウェアがまだシステムにインストールされていない場合。

ただし、このスクリプトを拡張して、WebsphereMQとそのバージョンの既存のインストールがないかシステムをチェックする必要があります。--バージョンが必要なバージョンでない場合(もちろん、コマンドラインから提供します)、アンインストールを開始する必要があります。

問題は、ファイルシステムを検索するアプローチを使用したくないということです。では、WMIクラスを使用してこのタスクを実行するにはどうすればよいですか?Win32_Productクラスを検索しましたが、インストールされているプログラムが1つしか返されませんでした(ただし、システムに40個のアプリケーションがインストールされています)。1)システムで特定のプログラムを検索する具体的な方法は何ですか。 。(私はVbScriptingまたはバッチプログラミングを受け入れています)2)インストールされたソフトウェアのレジストリキーの値はすべてのシステムで同じままですか?また、バージョンによって異なりますか?

前もって感謝します。

4

2 に答える 2

0

これを実現するために、おそらくWMIは必要ありません。レジストリにhklm\software\Microsoft\Windows\CurrentVersion\Uninstall\キーを照会し、戻り値を確認するだけです。

このコードに沿った何かから始めてください...

for /f "tokens=*" %%a in ('reg query hklm\software\Microsoft\Windows\CurrentVersion\Uninstall\ ^| find /i "IBM Websphere MQ" ') do (
 echo %%a
)
于 2012-05-10T13:05:00.880 に答える
0

そのヒントをPAに感謝します。しかし、私はVBScriptを使用した解決策を思いつきました。元のバッチファイルからこのスクリプトを呼び出しています。実際、私は次の場所で利用可能なさまざまなレジストリキーを列挙するvbスクリプトを作成しました。

      SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

「DisplayName」として「IBMWebSphereMQ」を検索します。見つかった場合は、バージョン番号と「製品コード」が一覧表示されます。コマンドラインからインストール目的で「製品コード」を使用できることに注意してください...以下は私が書いたスクリプトです。みんなが使えるようにここに投稿します。お気軽にご利用ください..........

  '------------------------------------------------------------------------------------      
  'Script Name : listMQ.vbs
  'Author      : Akshay Sinha
  'Created     : 05/10/12
  'Description : This Script attempts to check if the correct version of Websphere MQ             is already installed on the system.
  '            : If found the Script will exit with a ERRORLEVEL of 0.
  '            : If found but not of correct version... Script will exit with a 
  '              ERRORLEVEL of 1..Which in turn will initiate a Uninstalation      
  '            : If not found, Script will exit with a ERRORLEVEL of 2 and initiate a 
  '              a fresh installation.
  '            : Syntax: at command prompt ->
  '            : C:>Cscript listMQ.vbs
  '            : Check the value of %ERRORLEVEL% after execution. 
  '            : C:>echo %ERRORLEVEL%. Should give 0,1 or 2
  '------------------------------------------------------------------------------------

    Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE

    strComputer = "."
    strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
    strEntry1a = "DisplayName"
    strEntry1b = "QuietDisplayName"
    strEntry1c = "DisplayVersion"
    strEntry1d = "UninstallString"

    Set objReg = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv")
    objReg.EnumKey HKLM, strKey, arrSubkeys
    WScript.Echo "Installed Applications" & VbCrLf
intVersionNum="1.0.0.0"
    For Each strSubkey In arrSubkeys
    intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, strEntry1a, strValue1)
if intRet1 <> "" Then
objReg.GetExpandedStringValue HKLM, strKey & strSubkey, strEntry1a, strValue1
intCompare=StrComp("IBM WebSphere MQ",strValue1,vbTextCompare)
    IF intCompare = 0 THEN
objReg.GetExpandedStringValue HKLM, strKey & strSubkey, strEntry1c, intVersionNum
strUninstall=strSubkey
WScript.Echo "Congratulations!! Websphere MQ is already installed on this system"
        WScript.Echo strEntry1a & " : " & strValue1 
        WScript.Echo strEntry1c & " : " & intVersionNum 
    END IF
End If
Next

IF intVersionNum="1.0.0.0" THEN
        WScript.Echo "Sorry Websphere MQ was not found on this system" 
        WScript.Quit 2
END IF

intVersionCompare=StrComp("7.0.1.5",intVersionNum,vbTextCompare)
IF intVersionCompare = 0  THEN
WScript.Echo "Congratulations!! Correct version of Websphere MQ is installed" 
WScript.Echo "Uninstall String for this product is : " & strUninstall
WScript.Quit 0
ELSE
WScript.Echo "Wrong Version of MQ installed"
WScript.Echo "Initiating Unistallation....."
WScript.Quit 1
END IF

これはかなり自明のスクリプトです。問題が発生した場合はお知らせください。

于 2012-05-11T13:27:25.987 に答える