ソフトウェア

決まった時間のログ管理におすすめの方法[No4]

スポンサーリンク

「毎日、決められた時間にパソコンがログオンしているかどうか確認したい」、「ログオフしていたら知らせてほしい」、「決まった時間にパソコンがログオン、ログオフ、どちらの状態であったか知りたい( ログファイルを作成して管理したい )」と思ったことはありませんか?

パソコンは「ログオフせず(または、スリープしない)で、ずっとパソコンをログオン状態(例:デスクトップが表示されている画面)にしておきたい」と思っていても、誰かが操作したり、リモート接続されたり、PCの設定によってログオフ状態になってしまうことがあります。

そこで今回は、決まった時間のログ管理におすすめの方法をご紹介します。

主な処理内容

特定のファイルの有無によって、決まった時間にログオンしていたかどうかがわかります。

スポンサーリンク

具体的な方法

タスクスケジューラに次のプログラムが動作するタスクを、それぞれ登録するだけです。それぞれ、プログラム1、2、3の順に実行されるようにタスクのトリガーを設定して下さい。

プログラム内容

▼プログラム1(後でタスク1に登録):
Dドライブ直下に「AppTaskFolder」フォルダを作成しその中に次の2つのファイルを作成します。
※どちらのプログラムも同じをします。


'------------------------------------------------------------------------
'カレントディレクトリのパス
'------------------------------------------------------------------------
Dim Fso01
Set Fso01 = createObject("Scripting.FileSystemObject")
Dim Cfolpass : Cfolpass = Fso01.getParentFolderName(WScript.ScriptFullName)
'------------------------------------------------------------------------
'ファイル作成
'------------------------------------------------------------------------
Dim Fso02 : Set Fso02 = WScript.CreateObject("Scripting.FileSystemObject") 
Dim Fn  : Set Fn = Fso02.CreateTextFile(Cfolpass & "\LogOn.txt")
'------------------------------------------------------------------------

'------------------------------------------------------------------------
'設定:カレントディレクトリのパス
'------------------------------------------------------------------------
Dim Fso
Set Fso = createObject("Scripting.FileSystemObject")
Dim Cfolpass : Cfolpass = fso.getParentFolderName(WScript.ScriptFullName)
'------------------------------------------------------------------------
'出力処理
'------------------------------------------------------------------------
'出力ファイル名(書き出し先ファイル)
Dim outputFileName : outputFileName = Cfolpass & ".\LogOn.txt"
'出力ストリームの生成・設定(テキスト、UTF-8)
Dim outStream : Set outStream =CreateObject("ADODB.Stream")
With outStream
   .type = 2
   .charset = "UTF-8"
   .open 
 .WriteText n, 1 '0:改行無し 1:改行有り
   .SaveToFile outputFileName, 2 '出力ファイル生成 '1:ファイルがない場合はファイル作成 2:ファイルがある場合は上書き
End With
'------------------------------------------------------------------------
'クローズ処理
'------------------------------------------------------------------------
'ストリームを閉じて、オブジェクトを解放 
outStream.Close : Set outStream = Nothing
'------------------------------------------------------------------------

▼プログラム2(後でタスク2に登録):
先程作成した「AppTaskFolder」フォルダ内に次の2つのファイルを作成します。

後述の★1の場合:


'------------------------------------------------------------------------
'変数定義
'------------------------------------------------------------------------
Dim filename01 : filename01 = "LogOn"
Dim extension01 : extension01 = ".txt"
'------------------------------------------------------------------------
'カレントディレクトリのパス
'------------------------------------------------------------------------
Dim Fso01 : Set Fso01 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn01  : Fn01 = Fso01.getParentFolderName(WScript.ScriptFullName)
'------------------------------------------------------------------------
'ファイルが存在する 場合:True
'ファイルが存在しない場合:False
'------------------------------------------------------------------------
Dim Fso02 : Set Fso02 = WScript.CreateObject("Scripting.FileSystemObject") 
Dim Fn02  : Fn02 = Fso02.FileExists(Fn01 & "\" & filename01 & extension01)
'------------------------------------------------------------------------
'ファイル有無で処理:
'------------------------------------------------------------------------
If Fn02 = True Then
   '------------------------------------------------------------------------
   'ファイル存在する場合:ファイル名変更
   '------------------------------------------------------------------------
   Dim Fso03 : Set Fso03 = WScript.CreateObject("Scripting.FileSystemObject") 
   Dim Fn03  : Set Fn03 = Fso03.GetFile(Fn01 & "\" & filename01 & extension01)
   '------------------------------------------------------------------------
   'ファイル存在する場合:ファイル名変更:ファイル名作成
   '------------------------------------------------------------------------
   Dim LenDyyyy : LenDyyyy = Len("yyyy")
   Dim LenDmm   : LenDmm = Len("mm")
   Dim LenDdd   : LenDdd = Len("dd")
   
   Dim LenThh   : LenThh = Len("hh")
   Dim LenTmm   : LenTmm = Len("mm")
   Dim LenTss   : LenTss = Len("ss")
   
   Dim StrTemp : StrTemp = Replace(Now(), "/", "")
   StrTemp = Replace(StrTemp, " ", "")
   StrTemp = Replace(StrTemp, ":", "")
   
   Dim Dyyyy : Dyyyy = Left(StrTemp, LenDyyyy)
   StrTemp = Mid(StrTemp, LenDyyyy + 1)
   
   Dim Dmm : Dmm = Left(StrTemp, LenDmm)
   StrTemp = Mid(StrTemp, LenDmm + 1)
   
   Dim Ddd : Ddd = Left(StrTemp, LenDdd)
   StrTemp = Mid(StrTemp, LenDdd + 1)
   
   Dim Thh : Thh = Left(StrTemp, LenThh)
   StrTemp = Mid(StrTemp, LenThh + 1)
   
   Dim Tmm : Tmm = Left(StrTemp, LenTmm)
   StrTemp = Mid(StrTemp, LenTmm + 1)
   
   Dim Tss : Tss = Left(StrTemp, LenTss)
   StrTemp = Mid(StrTemp, LenTss + 1)
   
   Dim FormatNowTime
   FormatNowTime = Dyyyy & "年"
   FormatNowTime = FormatNowTime & Dmm & "月"
   FormatNowTime = FormatNowTime & Ddd & "日"
   FormatNowTime = FormatNowTime & Thh & "時"
   FormatNowTime = FormatNowTime & Tmm & "分"
   FormatNowTime = FormatNowTime & Tss & "秒"

'  MsgBox(FormatNowTime)
   Fn03.Name = "log_" & filename01 & "_" & FormatNowTime & extension01
   '------------------------------------------------------------------------
ElseIf Fn02 = False Then
   '------------------------------------------------------------------------
   'ファイル存在しない場合:○○〇の処理
   '------------------------------------------------------------------------
   '○○〇の処理内容記載
'  MsgBox("ファイル存在なし :ポップアップで処理確認")
   '------------------------------------------------------------------------
Else : 
   '------------------------------------------------------------------------
   'ファイル存在しない場合:○○〇の処理
   '------------------------------------------------------------------------
   '○○〇の処理内容記載
'  MsgBox("ファイル存在エラー:ポップアップで処理確認")
   '------------------------------------------------------------------------
End If

後述の★2の場合:


'------------------------------------------------------------------------
'変数定義
'------------------------------------------------------------------------
Dim filename01 : filename01 = "LogOn"
Dim filename02 : filename02 = "Log_File_LogOnChecked"
Dim extension01 : extension01 = ".txt"
Dim extension02 : extension02 = ".txt"
'------------------------------------------------------------------------
'カレントディレクトリのパス
'------------------------------------------------------------------------
Dim Fso01 : Set Fso01 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn01  : Fn01 = Fso01.getParentFolderName(WScript.ScriptFullName)
'------------------------------------------------------------------------
'ファイルが存在する 場合:True
'ファイルが存在しない場合:False
'------------------------------------------------------------------------
Dim Fso02 : Set Fso02 = WScript.CreateObject("Scripting.FileSystemObject") 
Dim Fn02  : Fn02 = Fso02.FileExists(Fn01 & "\" & filename01 & extension01)
'------------------------------------------------------------------------
'ファイル有無で処理:
'------------------------------------------------------------------------
If Fn02 = True Then
'  MsgBox("01")
   '------------------------------------------------------------------------
   'ログファイルが存在する 場合:True
   'ログファイルが存在しない場合:False
   '------------------------------------------------------------------------
   Dim Fso03 : Set Fso03 = WScript.CreateObject("Scripting.FileSystemObject") 
   Dim Fn03  : Fn03 = Fso03.FileExists(Fn01 & "\" & filename02 & extension02)
   '------------------------------------------------------------------------
   'ログファイルが存在しなければ作成する:
   '------------------------------------------------------------------------
   If Fn03 = False Then
      '------------------------------------------------------------------------
'     MsgBox("02")
      'ログファイル作成
      '------------------------------------------------------------------------
      Dim Fso04 : Set Fso04 = WScript.CreateObject("Scripting.FileSystemObject") 
      Dim Fn04  : Set Fn04 = Fso04.CreateTextFile(Fn01 & "\" & filename02 & extension02)
      Fn04.Close
      'Set Fso04 = Nothing
      'Set Fn04 = Nothing
      '------------------------------------------------------------------------
      '5秒間停止する
      'Dim objWsh
      'WScript.Sleep 5000
      '------------------------------------------------------------------------
   End If
      
   '出力処理
   '------------------------------------------------------------------------
   Dim LenDyyyy : LenDyyyy = Len("yyyy")
   Dim LenDmm   : LenDmm = Len("mm")
   Dim LenDdd   : LenDdd = Len("dd")
   
   Dim LenThh   : LenThh = Len("hh")
   Dim LenTmm   : LenTmm = Len("mm")
   Dim LenTss   : LenTss = Len("ss")
   
   Dim StrTemp : StrTemp = Replace(Now(), "/", "")
   StrTemp = Replace(StrTemp, " ", "")
   StrTemp = Replace(StrTemp, ":", "")
   
   Dim Dyyyy : Dyyyy = Left(StrTemp, LenDyyyy)
   StrTemp = Mid(StrTemp, LenDyyyy + 1)
   
   Dim Dmm : Dmm = Left(StrTemp, LenDmm)
   StrTemp = Mid(StrTemp, LenDmm + 1)
   
   Dim Ddd : Ddd = Left(StrTemp, LenDdd)
   StrTemp = Mid(StrTemp, LenDdd + 1)
   
   Dim Thh : Thh = Left(StrTemp, LenThh)
   StrTemp = Mid(StrTemp, LenThh + 1)
   
   Dim Tmm : Tmm = Left(StrTemp, LenTmm)
   StrTemp = Mid(StrTemp, LenTmm + 1)
   
   Dim Tss : Tss = Left(StrTemp, LenTss)
   StrTemp = Mid(StrTemp, LenTss + 1)
   
   Dim FormatNowTime
   FormatNowTime = Dyyyy & "年"
   FormatNowTime = FormatNowTime & Dmm & "月"
   FormatNowTime = FormatNowTime & Ddd & "日"
   FormatNowTime = FormatNowTime & Thh & "時"
   FormatNowTime = FormatNowTime & Tmm & "分"
   FormatNowTime = FormatNowTime & Tss & "秒"

'  MsgBox(FormatNowTime)
   Dim LogContents : LogContents = "log_" & filename01 & "_" & FormatNowTime
   '------------------------------------------------------------------------
   'ログファイル追記
   '------------------------------------------------------------------------
   Dim Fso05 : Set Fso05 = WScript.CreateObject("Scripting.FileSystemObject") 
   Dim Fn05  : Set Fn05 = Fso05.OpenTextFile(Fn01 & "\" & filename02 & extension02, 8, True) '2の場合上書き、8の場合追記 
   Fn05.WriteLine(LogContents) 'Writeの場合:改行なし、Writelineの場合:改行あり
   '------------------------------------------------------------------------
   '------------------------------------------------------------------------
ElseIf Fn02 = False Then
   '------------------------------------------------------------------------
   'ファイル存在しない場合:○○〇の処理
   '------------------------------------------------------------------------
   '○○〇の処理内容記載
'  MsgBox("ファイル存在なし :ポップアップで処理確認")
   '------------------------------------------------------------------------
Else : 
   '------------------------------------------------------------------------
   'ファイル存在しない場合:○○〇の処理
   '------------------------------------------------------------------------
   '○○〇の処理内容記載
'  MsgBox("ファイル存在エラー:ポップアップで処理確認")
   '------------------------------------------------------------------------

End If

▼プログラム3(後でタスク3に登録):
先程作成した「AppTaskFolder」フォルダ内に次のファイルを作成します。


del .\LogOn.txt

スポンサーリンク

タスクスケジューラー登録内容

▼タスク1(プログラム1を登録):
タスクを登録する際、タスクのプロパティ(全般タブ)で「ユーザーがログオンしているときのみ実行する」を選択します。
これによって、ログオンしている時にのみファイルA(例:LogOn.txt)が出力されます。
※動作確認後、プロパティ(トリガータブ)で起動する日時を設定します。


▼ タスク2(プログラム2を登録):
ファイルAが存在した場合は決まった時間にログオンしていたことがわかるようになります。逆に、ファイルAが存在しなければ決まった時間にログオンしていなかったとわかります。

次のどちらの処理を行うか決めます。
・ファイルAのファイル名を
 「ファイル名:「ファイルAファイル名 + 現在の日時」」に変更する。 …(★1)
・ログファイルに現在の時刻を改行で追記する。…(★2)

今回プログラムの準備はできませんでしたが、次のようにしても良いと思います。
・ポップアップウィンドウ表示やメールを送信してログオン・ログオフ状態を知らせる。

タスクを登録する際、タスクのプロパティ(全般タブ)で「ユーザーがログオンしているかどうかにかかわらず実行する」を選択します。
※動作確認後、プロパティ(トリガータブ)で起動する日時を設定します。


▼タスク3(プログラム3を登録):
「ファイルAが存在すれば削除する」内容のタスクを作成します。
※動作確認後、プロパティ(トリガータブ)で起動する日時を設定します。

スポンサーリンク

補足

パソコンのログオン/ログオフ状態が知りたいときに、イベントビューアーで確認する方法もあります。しかし、そのやり方では誰かがそのパソコンを操作しないと確認ができません。今回ご紹介した方法なら、タスクスケジューラで自動的に確認してくれます。

タスクスケジューラーの登録方法はこちらで紹介しているので参考にして下さい。

注意事項

ご紹介したやり方/手順では、パソコンの電源をONにしておく必要があります。
パソコンの電源が切れていると、作動しないのでご注意ください。

最後までお付き合いいただきありがとうございます!

この情報が誰かの役にたてれば幸いです。

スポンサーリンク

-ソフトウェア