サーバーにてExcSnd.vbsを実行すると、ExcSnd.vbsのプログラム上でリモートマシンに接続し、サーバー上のファイルを開かせる。
このサンプルでは、サーバー上にあるExcSnd.exeという音を出すファイルをリモートマシン上で実行させるためのVBScript。サーバー上で実行するのは、Facade.vbs。
Facade.vbsより、メインのExcSnd.vbsを実行する。
Facade.vbsでは、他にもいくつかの共通モジュールを使用している。
それらの共通モジュールは、いかちソフトウェアのVBScriptサイトから入手できる。
ExcSnd.vbs
- Option Excplicit
- '==============================
- ' 定数定義
- '==============================
- 'サーバー名
- 'TODO:サーバー名を指定
- Const SERVER_NAME = "[サーバー名]"
- '共有フォルダ名
- '※ExcSnd.exeは、VBSモジュールと同一のフォルダに格納し、共有フォルダに設定
- Const SHARED_PATH = "TEST\source\ExcSnd\"
- '対象マシン一覧ファイル
- Const TARGET_MACHINE_FILE = ".\tgtfnlst.csv"
- '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ' 警告音を出すためのクラス
- '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Class ExcSnd
- '==============================
- ' 変数定義
- '==============================
- 'メッセージ
- Private mstrMessage
- '==============================
- ' プロパティ
- '==============================
- 'メッセージ
- Public Property Get Message()
- Message = mstrMessage
- End Property
- Private Property Let Message(ByVal vstrMsg)
- mstrMessage = vstrMsg
- End Property
- '********************************************************************************
- ' メソッド名:PlaySound
- ' 概要 :警告音を出す(Windows XP Exclamation.wav)
- ' パラメータ:なし
- ' 戻り値 :正常実行ならTrue、そうでなければFalse
- '********************************************************************************
- Public Function PlaySound()
- PlaySound = False
- '対象マシンの一覧を読み込み
- Dim varMachine
- If ReadMachineList(varMachine) = False Then
- Exit Function
- End If
- '対象マシンの警告音を出す
- If UBound(varMachine) > 0 Then
- If PlaySoundPersonal(varMachine) = False Then
- Exit Function
- End If
- End If
- PlaySound = True
- End Function
- '********************************************************************************
- ' メソッド名:ReadMachineList
- ' 概要 :警告音を出す対象となるマシンの一覧を読み込む
- ' パラメータ:[rvarMachine] - 対象マシン一覧
- ' 戻り値 :正常に読み込めたらTrue、そうでなければFalse
- '********************************************************************************
- Private Function ReadMachineList(ByRef rvarMachine)
- ReadMachineList = False
- Dim objTfm
- Set objTfm = New TextFileManager
- Dim strBuf
- strBuf = objTfm.ReadText(TARGET_MACHINE_FILE)
- rvarMachine = Split(strBuf, vbCrLf)
- ReadMachineList = True
- End Function
- '********************************************************************************
- ' メソッド名:PlaySoundPersonal
- ' 概要 :マシン個別に警告音を出す
- ' パラメータ:[rvarMachine] - 対象マシン一覧
- ' 戻り値 :正常に音声出力できたらTrue、そうでなければFalse
- '********************************************************************************
- Private Function PlaySoundPersonal(ByRef rvarMachine)
- PlaySoundPersonal = False
- On Error Resume Next
- Dim i
- For i = 0 To UBound(rvarMachine)
- If rvarMachine(i) = "" Then
- Exit For
- End If
- Dim objWMIService
- Set objWMIService = GetObject("winmgmts:\\" & rvarMachine(i) & "\root\cimv2:Win32_Process")
- Dim intProcessID
- 'TODO:管理者ユーザーIDと管理者ユーザーパスワードの指定
- Call objWMIService.Create("net use \\" & SERVER_NAME & "\C$ /user:" & SERVER_NAME & "\[管理者ログインID] [管理者ログインパスワード]", Null, Null, intProcessID)
- '※音がなったりならなかったりと不安定のため
- WScript.Sleep 3000
- Call objWMIService.Create("\\" & SERVER_NAME & SHARED_PATH & "excsnd.exe", Null, Null, intProcessID)
- '※音がなったりならなかったりと不安定のため
- WScript.Sleep 3000
- Call objWMIService.Create("net use \\" & SERVER_NAME & "\C$ /delete", Null, Null, intProcessID)
- Set objWMIService = Nothing
- If (Err.Number <> 0) Then
- Message = CStr(Err.Number) & ":" & Err.Desciption
- Exit Function
- End If
- Next
- On Error GoTo 0
- PlaySoundPersonal = True
- End Function
- End Class
Facade.vbs
- '※このプログラムを実行するには、管理者権限が必要です
- Option Explicit
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- Function Include(ByVal fileName)
- Include = fso.OpenTextFile(fileName, 1, False).ReadAll()
- End Function
- Execute Include(".\ExcSnd.vbs")
- Execute Include("..\..\common\FileCommon.vbs")
- Execute Include("..\..\common\TextFileManager.vbs")
- Execute Include("..\..\common\LogFile.vbs")
- '********************************************************************************
- ' 関数名:Main
- ' 概要 :警告音再生
- ' 引数 :なし
- ' 戻り値:なし
- '********************************************************************************
- Sub Main()
- Dim startTime
- startTime = Now()
- Dim es
- Set es = New ExcSnd
- Dim bRet
- bRet = es.PlaySound()
- If (bRet = False) Then
- Call WriteLog(startTime, es.Message)
- End If
- Set es = Nothing
- End Sub
- '********************************************************************************
- ' 関数名:WriteLog
- ' 概要 :エラーログを出力する
- ' 引数 :[startTime] - 実行開始
- ' [msg] - メインクラスからのメッセージ
- ' 戻り値:なし
- '********************************************************************************
- Sub WriteLog(ByVal startTime, ByVal msg)
- Const LOGFILE_PATH = "L:\警告音再生エラーログ.log"
- Dim fc
- Set fc = New FileCommon
- Call fc.FileDelete(LOGFILE_PATH)
- Set fc = Nothing
- Dim oLog
- Set oLog = New LogFile
- oLog.FileName = LOGFILE_PATH
- Dim sLog
- sLog = ""
- sLog = sLog & "実行開始時間:" & CStr(startTime) & vbCrLf
- sLog = sLog & "実行終了時間:" & CStr(Now()) & vbCrLf
- sLog = sLog & vbCrLf
- sLog = sLog & "警告音再生に失敗しました。" & vbCrLf
- sLog = sLog & "エラーの詳細は、以下のとおりです。" & vbCrLf
- sLog = sLog & vbCrLf
- sLog = sLog & msg & vbCrLf
- oLog.AddText sLog
- Set oLog = Nothing
- End Sub
0 件のコメント:
コメントを投稿