こんにちは、ネットワーク マシンの累積稼働時間データを簡単に取得しようとしています。
基本的に、ファイルに保存されたアップタイムの合計が必要なので、たとえば四半期の終わりにこれを報告できます。
スクリプトを実行するときに簡単にアップタイムを取得できますが、毎日マシンのアップタイムを節約する方法がわからないため、後で報告できます。
どんな助けでも大歓迎です。
マシン自体が監視する稼働時間でこれを行う場合は、(多かれ少なかれ) ログを継続的に更新する必要があります。システムのクラッシュまたは再起動後にカウンターがリセットされるため、最後のログ書き込み間の稼働時間情報が失われます。そしてクラッシュ/再起動。より良いアプローチは、システム監視ソリューション (Nagios、Zabbix、WhatsUp、SCOM など) を実装することです。これらのツールは、システムのアップタイムを継続的に追跡し、使用可能なレポートをすでに提供しています。
それでも「ローカル スクリプト」ルートに進みたい場合は、スケジュールされたタスクとして次のようなものを 5 分ごとに実行するとうまくいく可能性があります。
Set fso = CreateObject("Scripting.FileSystemObject")
Set wmi = GetObject("winmgmts://./root/cimv2")
Set re = New RegExp
logfile = "C:\path\to\uptime.log"
uptimes = fso.OpenTextFile(logfile, 1, True).ReadAll
'extract last uptime from log
re.Pattern = "(\d+)\s*$"
For m In re.Execute(uptimes)
lastUptime = CLng(m.SubMatches(0))
Next
'get current uptime
qry = "SELECT * FROM Win32_PerfFormattedData_PerfOS_System"
For Each v In wmi.ExecQuery(qry)
currentUptime = CLng(v.SystemUpTime)
Next
Set f = fso.OpenTextFile(logfile, 2)
If IsEmpty(lastUptime) Or lastUptime >= currentUptime Then
'append current uptime if the last uptime was greater or equal to than the
'current uptime (=> a crash or reboot occurred) or no uptime was logged before
f.WriteLine uptimes & currentUptime
Else
'update last uptime otherwise
f.WriteLine re.Replace(uptimes, currentUptime)
End If
f.Close