引き続き、Outlookの予定表に沿ってPCをロックする仕組みをつくっていきたいとおもいます。
前回は 休憩時間にパソコンをロックするタスクのひな形ファイルを準備するところまで進めました。
今回は、準備したひな形のxmlファイルをタスクスケジューラーへ登録する仕組みを作ります。
目次:
実行時間の更新とタスク登録コード全文
Option Explicit Dim nextBreakTime ' 引数の数を確認 if WScript.Arguments.Count = 2 Then nextBreakTime = WScript.Arguments(0) Else WScript.Quit() End if ' 登録用XMLファイルの更新 ' カレントディレクトリを取得 Dim Fso Set Fso = CreateObject("Scripting.FileSystemObject") Dim str,obj,currentDirectory str = WScript.ScriptFullName Set obj = Fso.GetFile( str ) Set obj = obj.ParentFolder currentDirectory = obj.Path Dim filePath ' ファイルパス作成 filePath = currentDirectory & "\" & "BreakTimeSchedule.xml" ' 登録用ファイルの更新 setTaskStartBoundary filePath, nextBreakTime ' タスクの登録 setTask filePath ,"BreakTimeSchedule" ' 登録用のXMLファイルを更新する sub setTaskStartBoundary(ByVal xmlFilePath,ByVal timeStr) ' XMLファイルの書き換え Dim objXML,filePath,startBoundary Set objXML = CreateObject("Msxml2.DOMDocument.3.0") ' XML を読み込み objXML.load(xmlFilePath) ' XMLファイル内容の変更 dim objList, objNode Set objList = objXml.SelectNodes("//Task/Triggers/TimeTrigger/StartBoundary") for each objNode in objList objNode.text = timeStr next ' XML を保存 objXML.save(xmlFilePath) set objXML = Nothing End sub ' タスクスケジューラへタスクを登録する sub setTask(ByVal xmlFilePath ,ByVal taskName) ' タスクの登録処理 Dim wsShell, wsExec,Cmd Set wsShell = CreateObject("WScript.Shell") Cmd = "schtasks /create /f /xml " & xmlFilePath & " /tn " & taskName wsShell.run Cmd,0 End sub
ここでは上記を「scdlSetBreakTimeSchedule.vbs」として保存します。
関数について
以下、関数について補足していきます。
ひな型のxmlファイルの実行時間を更新する関数
xmlファイル内での項目をノードと呼びます。ノードは入れ子構造になっていて構造は基本的に変わりません。
更新が必要な項目は開始日時1つだけなので、目的のノードまでの階層を直接書いて処理をしています。
' 登録用のXMLファイルを更新する sub setTaskStartBoundary(ByVal xmlFilePath,ByVal timeStr) ' XMLファイルの書き換え Dim objXML,filePath,startBoundary Set objXML = CreateObject("Msxml2.DOMDocument.3.0") ' XML を読み込み objXML.load(xmlFilePath) ' XMLファイル内容の変更 dim objList, objNode Set objList = objXml.SelectNodes("//Task/Triggers/TimeTrigger/StartBoundary") for each objNode in objList objNode.text = timeStr next ' XML を保存 objXML.save(xmlFilePath) set objXML = Nothing End sub
引数について
- xmlFilePath
ひな形xmlのファイルパスを指定します。 - timeStr
タスクの開始時間を指定します。
形式は「yyyy-mm-ddTy:nn:ss」です。
ひな形xmlファイルを使ってタスクを登録する関数
タスクの登録・更新にはschtasksコマンドを使います。
タスク登録後は実行時間が更新できればいいので、schtasksコマンドの「/change」オプションが使えそうですが、このオプションではタスク更新時にWindowsへのログインパスワードの入力を求められます。
休憩の回数分入力操作が増えるのは、正直面倒です。
そこで更新には「/create」オプションを使い、タスクの上書きを強制することで対応します。こちらはパスワード入力を求められません。
' タスクスケジューラへタスクを登録する sub setTask(ByVal xmlFilePath ,ByVal taskName) ' タスクの登録処理 Dim wsShell, wsExec,Cmd Set wsShell = CreateObject("WScript.Shell") Cmd = "schtasks /create /f /xml " & xmlFilePath & " /tn " & taskName wsShell.run Cmd,0 End sub
引数について
- xmlFilePath
登録するxmlファイルパス - taskName
タスクスケジューラーに登録するときの名前
今回はここまで。次回に続きます。
今回の仕組み必要なステップは下記になります。
この断片があなたの星へ続く道を、少しでも照らすことを願って
「【4】VBSでタスクを上書き登録する(Xmlファイル使用版)」への1件のフィードバック