引き続き、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件のフィードバック