Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

OS の Status を取得する VBScript を作成する

More than 1 year has passed since last update.

今回は少々レガシー系の記事を書きたいと思います。働き方改革と色々言われる中で、PC の状態を一括で管理したいという企業のリクエストが多くなってきている様な気がします。そのような背景もありつつPCの状態が一括監視できるように、今回は Windows の 起動状態を把握できる VBScript を作成したいと思います。

イベントログの取得について

今回は VBscript でイベントログからデータを抽出するようなスクリプトを作成します。PC の状態を示すイベントログはをまとめると以下の通りです。
image.png

参考記事
Windows のイベントビューアーを使って、何がいつ起きたか調べる
https://laboradian.com/find-out-event-using-event-viewer/

サンプルスクリプト

今回は単純にPCの開始/終了の時間を取得するスクリプトを作成しました。

sample.vbs
'取得ログをローカル時間に合わせる
Const CONVERT_TO_LOCAL_TIME = True
Set dtmStartDate = CreateObject("WbemScripting.SWbemDateTime") 
Set dtmEndDate = CreateObject("WbemScripting.SWbemDateTime") 
DateToCheck = Date
dtmStartDate.SetVarDate DateToCheck - 7, CONVERT_TO_LOCAL_TIME
dtmEndDate.SetVarDate DateToCheck + 1, CONVERT_TO_LOCAL_TIME

'イベントログの取得 今回は起動ログとシャットダウンのログ
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colEvents = objWMIService.ExecQuery _ 
    ("Select * from Win32_NTLogEvent Where TimeWritten >= '" _ 
        & dtmStartDate & "' and TimeWritten < '" _ 
        & dtmEndDate & "' AND (EventCode = 6005 OR EventCode = 6006)")

'ログ生成
Dim msg
For each objEvent in colEvents
    Set tempDate = CreateObject("WbemScripting.SWbemDateTime") 
    tempDate.Value = objEvent.TimeWritten
If objEvent.EventCode = 6005 then
    msg = msg & "Start : " & tempDate.GetVarDate(True) & vbCrLf
ElseIf objEvent.EventCode = 6006 then
    msg = msg & "Stop : " & tempDate.GetVarDate(True) & vbCrLf
End If
Next

'ログ出力
Wscript.Echo msg

実際に実行してみる

このスクリプトを作成し「sample.vbs」等の適用な名前を付けて、任意の場所に配置します。コマンドプロンプトからこのスクリプトを呼び出すことで、PCの状態を Echo してくれます。
image.png

上記のことをイベントビューワーで確認することができますが、イベントビューワーから生成しようとするとかなり時間がかかってしまいます。また、業務時間の管理などに行う場合は、一人ひとりみるのは非常に手間がかかるので、上記のような形でスクリプト化するととても楽かもしれません。次回の記事では、実際に仮想空間に何台かデバイスを立ててみて、ログの一括取得を実施したいと思います。

参考記事

PCの起動時刻の取得 出退勤管理用
https://qiita.com/a2kiti/items/123894813a0975f19470

Windowsイベントログをコマンドでエクスポートする
http://quatrefromage.hatenablog.jp/entry/2016/08/06/164436

komiyasa
マイクロソフトでエンジニアをしています。Everybody needs a hobby!! 記事の内容はすべて個人的見解です。
microsoft
マイクロソフトのメンバーが最新の技術情報をお届けします。Twitterアカウント(@msdevjp)やYouTubeチャンネル「クラウドデベロッパーちゃんねる」も運用中です。
https://azure.microsoft.com/ja-jp/developer/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away