2014年7月30日水曜日

[Script][VBS]Flash Player バージョンチェック(ActiveDirectory メンバPC全台チェックの巻)

ActiveDirectory ドメインに参加指定しているメンバPCの Flash Player バージョンチェックをします。

仕掛け

1.タスクスケジューラを使ってPC上でチェックスクリプト(FlashVersion_RegCheck.vbs)を実行する。
 ・タスクスケジューラへの登録は ActiveDirectory のグループポリシーで配布。
 ・チェックスクリプトは AD サーバ上の SYSVOL フォルダに置く。
 ・チェックスクリプトでチェックした結果ファイルは共有フォルダ(\\LogServer\FlashVersionCheck\)に置かれる。

2.共有フォルダに置かれた結果ファイルを集計する。
 ・集計スクリプト(FileVersionCheck_Analyze.vbs)が集計して CSV ファイルを出力する。

注意点

チェック方法
 ・各PC上のレジストリをチェックします。
  -詳しくは [日記]Flash Player はブラウザによってインストールの仕組みが違います を参照。

タスクスケジューラの登録
 ・「全般」タブ:タスクの実行に使うユーザーアカウントは【SYSTEM】アカウントに指定する。
 ・「操作」タブ:プログラムの開始でスクリプトはADサーバ上の Sysvol フォルダを指定する。
    →  \\ADServer\SYSVOL\DomainName\scripts\FlashVersion_RegCheck.vbs

ログ格納用の共有フォルダ
 ・Authenticated Users グループへの書き込み権限が必要。(各PCがシステム権限で共有フォルダへ書き込みに行こうとするため)

チェックスクリプト:FlashVersion_RegCheck.vbs
 ・ログ格納用の共有フォルダのパスを変数 strNetworkPath に指定する。(今は "\\LogServer\FlashVersionCheck\" となっている)
 ・ログファイル名は <IP アドレス>_<コンピュータ名>.txt (例:192.168.0.1_PC001.txt)。
  -気に入らなかったり使い勝手が悪ければチェックスクリプトで自由にカスタマイズが可能。
  -集計スクリプトがこのファイルを扱うから、このまま使うのがいい。

集計スクリプト:FileVersionCheck_Analyze.vbs
 ・スクリプトファイルのあるフォルダに FlashVersionCheck フォルダを置いて実行する。

実行イメージ

うまくいくとこんなかんじでログ格納フォルダにログが集まります。

スクリプト

FlashVersion_RegCheck.vbs
On error resume next

' -----------------------------
' IP アドレスを取得
' -----------------------------
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

For Each objItem in colItems
     For Each objAddress in objItem.IPAddress
         If Left(objAddress, 5) = "10.0." Then
         strIPAddress = objAddress
         End If
     Next
Next

' MsgBox "IP Addresss: " & strIPAddress

' -----------------------------
' コンピュータ名を取得
' -----------------------------
Set objNetWork = WScript.CreateObject("WScript.Network")
strComputerName = objNetWork.ComputerName
' MsgBox "ComputerName= " & objNetWork.ComputerName

' -----------------------------
' ファイル作成
' -----------------------------
' ★★適宜書き換える★★
'strNetworkPath = "\\LogServer\FlashVersionCheck\"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(strNetworkPath & strIPAddress & "_" & strComputerName & ".txt", True, True)

objFile.WriteLine "IP Address: " & strIPAddress
objFile.WriteLine "Computer Name: " & strComputerName

' -----------------------------
' レジストリチェック
' -----------------------------
Set objShell = WScript.CreateObject("WScript.Shell")

FlashPlayerVersion = objShell.RegRead ("HKLM\Software\Macromedia\FlashPlayer\CurrentVersion")
FlashPlayerActiveXVersion = objShell.RegRead ("HKLM\Software\Macromedia\FlashPlayerActiveX\Version")
FlashPlayerPluginVersion = objShell.RegRead ("HKLM\Software\Macromedia\FlashPlayerPlugin\Version")
FlashPlayer64Version = objShell.RegRead ("HKLM\Software\Wow6432Node\Macromedia\FlashPlayer\CurrentVersion")
FlashPlayer64ActiveXVersion = objShell.RegRead ("HKLM\Software\Wow6432Node\Macromedia\FlashPlayerActiveX\Version")
FlashPlayer64PluginVersion = objShell.RegRead ("HKLM\Software\Wow6432Node\Macromedia\FlashPlayerPlugin\Version")

'Wscript.Echo "FlashPlayerVersion = " & FlashPlayerVersion & vbcr & _
'             "FlashPlayerActiveXVersion = " & FlashPlayerActiveXVersion & vbcr & _
'             "FlashPlayerPluginVersion = " & FlashPlayerPluginVersion & vbcr & _
'             "FlashPlayer64Version = " & FlashPlayer64Version & vbcr & _
'             "FlashPlayer64ActiveXVersion = " & FlashPlayer64ActiveXVersion & vbcr & _
'             "FlashPlayer64PluginVersion = " & FlashPlayer64PluginVersion

If Trim(FlashPlayerVersion) <> "" Then
  If Replace(FlashPlayerVersion, ",", ".") = FlashPlayerActiveXVersion and _
     Replace(FlashPlayerVersion, ",", ".") = FlashPlayerPluginVersion Then

    objFile.WriteLine "FlashPlayerVersion: " & Replace(FlashPlayerVersion, ",", ".")

  Else
    objFile.WriteLine "FlashPlayerVersion: Abnormal Data(""" & FlashPlayerVersion & """,""" & _
                                                             FlashPlayerActiveXVersion & """,""" & _
                                                             FlashPlayerPluginVersion & """)"
  End If  
Else
  objFile.WriteLine "FlashPlayerVersion: No Data"
End If

If Trim(FlashPlayer64Version) <> "" Then
  If Replace(FlashPlayer64Version, ",", ".") = FlashPlayer64ActiveXVersion and _
     Replace(FlashPlayer64Version, ",", ".") = FlashPlayer64PluginVersion Then

    objFile.WriteLine "FlashPlayer64Version: " & Replace(FlashPlayer64Version, ",", ".")

  Else
    objFile.WriteLine "FlashPlayer64Version: Abnormal Data(""" & FlashPlayer64Version & """,""" & _
                                                             FlashPlayer64ActiveXVersion & """,""" & _
                                                             FlashPlayer64PluginVersion & """)"
  End If  
Else
  objFile.WriteLine "FlashPlayer64Version: No Data"
End If

' -----------------------------
' ファイルクローズ
' -----------------------------
objFile.Close

FileVersionCheck_Analyze.vbs
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

'-------------------------------------
' FlashVersionCheck フォルダを取得
'-------------------------------------

strFullPath = WScript.ScriptFullName
strDir = objFSO.GetFile(strFullPath).ParentFolder
Set objFolder = objFSO.GetFolder(strDir & "\FlashVersionCheck")


'-----------------------------------------
' 集計結果ファイル(CSV ファイル)の作成
'-----------------------------------------
strLogCSVFile = strDir & "\FileVersioinCheckLog.txt"
Set objLogCSVFile = objFSO.CreateTextFile(strLogCSVFile)


'-------------------------------------
' 結果ファイル1つ1つに対してループ
'-------------------------------------

For Each objFile In objFolder.Files

  ' デバッグ用
  'WScript.Echo objFile.Name

  '-----------------
  'ファイルを開く
  '-----------------
  Set objLogFile = objFSO.OpenTextFile(objFile.Path, 1, false, -1)

  ' 念のため初期化
  strActiveXVersion = ""
  strPluginVersion = ""
  str64bitActiveXVersion = ""
  str64bitPluginVersion = ""

  ' 1行目:IP Address
  strReadLine = objLogFile.ReadLine()
  strIPAddress = Replace(strReadLine, "IP Address: ", "")

  ' 2行目:Hostname
  strReadLine = objLogFile.ReadLine()
  strHostname = Replace(strReadLine, "Computer Name: ", "")

  ' 3行目:FlashPlayerVersion
  strReadLine = objLogFile.ReadLine()
  strLineData = Replace(strReadLine, "FlashPlayerVersion: ", "")
  If Trim(strLineData) = "No Data" Then
    strActiveXVersion = ""
    strPluginVersion = ""
  Else
    If Left(strLineData, 13) <> "Abnormal Data" Then
      strActiveXVersion = strLineData
      strPluginVersion = strLineData
    Else
      ' " で区切る
      aryStrings = Split(strLineData, """")

      'aryStrings(0) : "Abnormal Data("
      'aryStrings(1) : Version Key Data
      'aryStrings(2) : "," mark
      'aryStrings(3) : strActiveXVersion
      'aryStrings(4) : "," mark
      'aryStrings(5) : strPluginVersion
      'aryStrings(6) : ")" mark

      strActiveXVersion = aryStrings(3)
      strPluginVersion = aryStrings(5)
    End If
  End If

  ' 4行目:FlashPlayer64Version
  strReadLine = objLogFile.ReadLine()
  strLineData = Replace(strReadLine, "FlashPlayer64Version: ", "")
  If Trim(strLineData) = "No Data" Then
    str64bitActiveXVersion = ""
    str64bitPluginVersion = ""
  Else
    If Left(strLineData, 13) <> "Abnormal Data" Then
      str64bitActiveXVersion = strLineData
      str64bitPluginVersion = strLineData
    Else
      ' " で区切る
      aryStrings = Split(strLineData, """")

      'aryStrings(0) : "Abnormal Data("
      'aryStrings(1) : Version Key Data
      'aryStrings(2) : "," mark
      'aryStrings(3) : str64bitActiveXVersion
      'aryStrings(4) : "," mark
      'aryStrings(5) : str64bitPluginVersion
      'aryStrings(6) : ")" mark

      str64bitActiveXVersion = aryStrings(3)
      str64bitPluginVersion = aryStrings(5)
    End If
  End If


  '------------------------
  ' CSV ファイル書き込み
  '------------------------
  strWriteLine = """" & strIPAddress & """,""" & _
                        strHostname & """,""" & _
                        strActiveXVersion & """,""" & _
                        strPluginVersion & """,""" & _
                        str64bitActiveXVersion & """,""" & _
                        str64bitPluginVersion & """"

  objLogFile.Close

  objLogCSVFile.WriteLine (strWriteLine)

Next


objLogCSVFile.Close

Script のページに戻る

0 件のコメント:

コメントを投稿