Adobe FlashやAdobe Readerをタスクスケジューラから自動でアップデートするスクリプト

ページ : 1 2
<この記事を全て表示する場合はこちらをクリック>

実行するためのBATファイルは、以下のように記載すればOKです。

Cscript //nologo c:\hogehoge.vbs

インストールされているアプリケーション名は、コンピュータのレジストリ値から取得します。毎度のことですが、最低限の動作確認は行っていますが、動作に責任は持ちません。使いやすく適当に編集して使ってください。

また、実行の結果はイベントログから確認出来ます。

Option Explicit

Call Query_Uninstall_Reg()

Sub Query_Uninstall_Reg()
	Dim objReg
	Dim arrSubKeys
	Dim strSubKey,strSubKey2
	Dim strValue1,strValue2
	Dim intRet1,intRet2

	Dim strAPPLICATION_NAME
	Dim strLatestVersion
	Dim strExecute
	
	Dim strMessegeHeader
	Dim strMessege
	
	'イベントログに残すメッセージのヘッダ
	strMessegeHeader = "pnpk.net" & vbCRLF
	
	Const HKLM = &H80000002
	Set objReg = GetObject("winmgmts://./root/default:StdRegProv")
	Const strBaseKey = "Software\Microsoft\Windows\CurrentVersion\Uninstall\"
	objReg.EnumKey HKLM, strBaseKey, arrSubKeys
	
	For Each strSubKey In arrSubKeys
		strSubKey2 = Left(strSubKey,27)
		'Adobe アプリケーション用設定
		Select Case strSubKey2
			'Adobe Reader 8
			Case "{AC76BA86-7AD7-1041-7B44-A8"
				strAPPLICATION_NAME = "Adobe Reader 8"
				strLatestVersion    = "8.2.0"
				strExecute          = "msiexec.exe /quiet /package ""c:\hogehoge\AdbeRdr820_ja_JP.msi"""
			'Adobe Reader 9
			Case "{AC76BA86-7AD7-1041-7B44-A9"
				strAPPLICATION_NAME = "Adobe Reader 9"
				strLatestVersion    = "9.3.0"
				strExecute          = """c:\hogehoge\AdbeRdr930_ja_JP.exe"" /sAll /rs /rps"
			'Adobe Flash Player Plugin
			Case "Adobe Flash Player Plugin"
				strAPPLICATION_NAME = "Adobe Flash Player Plugin"
				strLatestVersion    = "10.0.42.34"
				strExecute          = """c:\hogehoge\install_flash_player.exe"" /s"
			'Adobe Flash Player ActiveX
			Case "Adobe Flash Player ActiveX"
				strAPPLICATION_NAME = "Adobe Flash Player ActiveX"
				strLatestVersion    = "10.0.42.34"
				strExecute          = """c:\hogehoge\install_flash_player_ax.exe"" /s"
			'それ以外
			Case Else
				strAPPLICATION_NAME = ""
				strLatestVersion    = ""
				strExecute          = ""
		End Select
		
		If strAPPLICATION_NAME <> "" Then
			intRet1 = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, "DisplayName", strValue1)
			intRet2 = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, "DisplayVersion", strValue2)
			If intRet1 <> 0 Then
			    intRet1 = objReg.GetStringValue(HKLM, strBaseKey & strSubKey,"QuietDisplayName", strValue1)
			End If
			
			If (strValue1 <> "") and (intRet1 = 0) Then
				'バージョンが同じ場合
				If Replace(strValue2,".","") = Replace(strLatestVersion,".","") Then
					strMessege = strMessegeHeader & "このコンピュータには " & strValue1 &_
								 "(バージョン:" & strValue2 & ") がインストールされています。" &_
								  vbCRLF & strValue1 & "の最新バージョンは " & strLatestVersion & "です。" & vbCRLF
					Call WriteEVENT(4,strMessege)
					WScript.Echo strMessege & vbCRLF
				'クライアントにインストールされているアプリケーションのバージョンが古い場合
				ElseIf Replace(strValue2,".","") < Replace(strLatestVersion,".","") Then
					strMessege = strMessegeHeader & "このコンピュータには " & strValue1 &_
								 "(バージョン:" & strValue2 & ") がインストールされています。" &_
								  vbCRLF & strValue1 & "の最新バージョンは " & strLatestVersion & "です。" &_
								  strValue1 & " をアップデート試みます。" & vbCRLF
					Call WriteEVENT(4,strMessege)
					WScript.Echo strMessege & vbCRLF
					'strExecuteがあった場合だけ実行
					If strExecute <> "" Then
						'EXEC_EXE(strExecute)
					End If
				'クライアントにインストールされているアプリケーションのバージョンがサーバ上より新しい場合
				Else
					strMessege = strMessegeHeader & "このコンピュータには " & strValue1 &_
								 "(バージョン:" & strValue2 & ") がインストールされています。" &_
								  vbCRLF & strValue1 & "の最新バージョンは " & strLatestVersion & "です。"
					Call WriteEVENT(2,strMessege)
					WScript.Echo strMessege & vbCRLF
				End If
			End If
		End If
	Next
	Set objReg = Nothing
End Sub

'コードの実行
Function EXEC_EXE(EXEC_CODE)
	Dim objShell
	Dim objExec
	
	Set objShell = WScript.CreateObject("WScript.Shell")
	Set objExec = objShell.Exec(EXEC_CODE)
	
	Do While objExec.Status = 0
		WScript.Sleep 100
	Loop
	
	Set objShell = Nothing
	Set objExec  = Nothing
End Function

'イベントログの書き込み
Sub WriteEVENT(int,strBODY)
	Dim objShell
	Set objShell = Wscript.CreateObject("Wscript.Shell")
	objShell.LogEvent int,strBODY
	Set objShell = Nothing
End Sub

インターネット上から最新版を取得した方が楽かとも思ったのですが、インターネットへのトラフィックも増えてしまいますし、ある程度の手動管理も必要かなと。

このスクリプトは、細かく言うと、インストーラの配置場所の権限設定を誤るとセキュリティ的に非常にリスクです。
また、コンピュータ自身がデータにアクセスする事になるので、ドメイン環境であればアクセス権限に”Domain Computers”読み取りの属性を付与してください。

利用者にスクリプトの内容を見せない場合には、管理用の権限+Domain Computers程度のアクセス権限で十分だと思います。

ページ : 1 2
<この記事を全て表示する場合はこちらをクリック>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です