- 2010-01-15 (金) 1:41
- Windows XP
ページ : 1 2
<この記事を全て表示する場合はこちらをクリック>

最近Gumblarが流行っているので、会社で手軽に使えるAdobeアプリケーションのアップデートスクリプトを作ってみました。管理者権限のあるアカウントでログインし、以下のようなコマンドを利用してタスクスケジューラに登録して使ってください。
タスクスケジューラ経由でバックグラウンドにアップグレードを実行するため、コンピュータ利用者には管理者権限を付与する必要はありませんし、ログインする必要も特にありません。
Windows XP(32bit)でのみ動作確認しています。
このスクリプトはそれぞれのコンピュータ上で実行する必要があります。手っ取り早く登録する場合には、コマンドラインからタスクスケジューラに登録するのが便利です。
例えば以下の場合ですと、任意のコンピュータが20分間アイドルだった場合、”hotfix.bat”を実行するタスクを登録出来ます。
'自分自身に登録する場合 SCHTASKS /CREATE /S <PC名を入力> /SC ONIDLE /I 20 /TN "Adobeアプリの修正パッチ" /RU "NT AUTHORITY\SYSTEM" /TR "\\hogehoge\hotfix.bat" 'リモートコンピュータに登録する場合 SCHTASKS /CREATE /S <PC名を入力> /SC ONIDLE /I 20 /TN "Adobeアプリの修正パッチ" /RU "NT AUTHORITY\SYSTEM" /TR "\\hogehoge\hotfix.bat"
アップデートファイルはインターネット側からではなく、ローカルやファイルサーバ上の適当な場所に置いてください。
最新のパッチがリリースされたら、[strLatestVersion]という部分を最新版に書き変えて、[strExecute]の実行ファイルを変更する事で、Adobe Reader9のうちはこのまま利用出来るはずです。
実行するための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程度のアクセス権限で十分だと思います。
Popularity: 2% [?]
ページ : 1 2
<この記事を全て表示する場合はこちらをクリック>
関連する記事
- Newer : Air Station WZR-HP-G301NH
- Older : THIS IS ART
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://pnpk.net/cms/archives/2536/trackback
- Listed below are links to weblogs that reference
- Adobe FlashやAdobe Readerをタスクスケジューラから自動でアップデートするスクリプト from http://pnpk.net