การแก้ไขสคริปต์เพื่อดักจับเวลาเข้าสู่ระบบ / การปิดระบบใน Windows


0

บางครั้งตอนนี้ฉันใช้สคริปต์นี้เพื่อดูเวลาเข้าสู่ระบบของฉันสำหรับคอมพิวเตอร์เฉพาะ:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("C:\Windows\setupact.log")
Wscript.Echo "Log on today at " & FormatDateTime(objFile.DateLastModified,vbShortTime)

นี่เป็นคอมพิวเตอร์รุ่น Windows 7 Enterprise ที่ติดตั้ง Service Pack 1 มันเชื่อมต่อกับโดเมนและฉันไม่สามารถเปลี่ยนนโยบายกลุ่มได้

เป็นไปได้หรือไม่ที่จะแก้ไขสคริปต์เพื่อดักจับทั้งเวลาเข้าสู่ระบบและเวลาปิดเครื่อง? และถ้าเป็นเช่นนั้นเป็นไปได้หรือไม่ที่จะจับภาพนี้ในช่วงเวลาที่กำหนด (เช่นสำหรับสัปดาห์ก่อนหน้าหรือ 28 วันก่อนหน้า)? สคริปต์ไม่จำเป็นต้องจัดเก็บ / บันทึกข้อมูลนี้ - ฉันสามารถใช้ชีวิตกับการดูได้

ฉันเจอคำถามนี้ด้วย แต่ก็ไม่ได้ช่วยอะไรมาก (นอกเหนือจากความจริงที่ว่ามันทำให้ฉันลืมตาไปที่ Event Viewer

ฉันได้ค้นพบตั้งแต่ฉันสามารถดูข้อมูลที่ฉันต้องการด้วยตนเองโดยการดูบันทึกต่างๆใน Event Viewer แต่ฉันไม่แน่ใจว่ามีวิธีการใช้ประโยชน์จากข้อมูลนี้ในสคริปต์หรือไม่ เห็นได้ชัดว่าข้อมูลนี้จะต้อง 'จัดเก็บ' ไว้ที่ใดที่หนึ่งในระบบ แต่ฉันไม่แน่ใจว่าจะสามารถเข้าถึงได้จากที่ไหน

ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมมากที่สุด


คอมพิวเตอร์นี้เข้าร่วมกับโดเมนหรือไม่ ถ้าใช่คุณสามารถแก้ไขนโยบายกลุ่มได้หรือไม่
Brian Duke

ใช่เป็นและไม่ฉันไม่สามารถแก้ไขนโยบายกลุ่มได้ ฉันจะอัปเดตคำถามของฉันเพื่อพูดถึงข้อเท็จจริงเหล่านี้
Monomeeth

คำตอบ:


0

ฉันพบสคริปต์ที่อาจเหมาะกับความต้องการของคุณ:

Option Explicit

Dim strComputer, objWMIService, colEvents, objEvent
Dim dtmStart, dtmEnd, strUser

strComputer = "West204"
dtmStart = "20091228000000.000000-360"
dtmEnd = "20100101000000.000000-360"
strUser = "MyDomain\jsmith"
strUser = "jsmith"

Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate,authenticationLevel=Pkt,(Security)}!\\" _ 
    & strComputer & "\root\cimv2") 

Set colEvents = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Security' AND " _
        & "TimeWritten >= '" & dtmStart & "' AND TimeWritten < '" _
        & dtmEnd & "' AND " _
        & "(EventCode = '528' OR EventCode = '540' OR EventCode = '538')")

For Each objEvent In colEvents
    Wscript.Echo "---------------------------"
    Wscript.Echo "Computer: " & objEvent.ComputerName
    Wscript.Echo "Event Code: " & objEvent.EventCode
    Wscript.Echo "Message: " & objEvent.Message
    Wscript.Echo "Time: " & objEvent.TimeWritten
    Wscript.Echo "Event Type: " & objEvent.EventType
    Wscript.Echo "User: " & objEvent.User
Next

เพียงแค่เปลี่ยนstrComputer, dtmStart, dtmEnd, strUserและstrUserมีข้อมูลของคุณ

ข้อความค้นหาเหล่านี้ช้าเสมอ ฉันพยายามเพิ่ม WHERE clause สำหรับผู้ใช้ แต่ไม่สามารถใช้งานได้ดังนั้นผลลัพธ์จะรวมกิจกรรมการเข้าสู่ระบบ / ออกจากระบบทั้งหมดระหว่างวันที่ ฉันคาดหวังว่าจะมีคำสั่ง WHERE เพิ่มเติมที่จะทำให้การสืบค้นเร็วขึ้น แต่ดูเหมือนจะไม่เป็นเช่นนั้น เรียกใช้สคริปต์ที่พรอมต์คำสั่งและเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ข้อความ รูปแบบวันที่คือ yyyymmddhhmmss.ssssss-zzz, -zzz คืออคติเขตเวลาท้องถิ่นของคุณในไม่กี่นาที (จาก UTC)

แหล่ง


ขอบคุณสำหรับสิ่งนี้. น่าเสียดายที่มันไม่ทำงาน หรือฉันไม่สามารถทำงานได้ ฉันจะให้มันทำงาน แต่ผลลัพธ์จะเหมือนเดิมเสมอ: Microsoft (R) Windows Script Host เวอร์ชัน 5.8 Copyright (C) Microsoft Corporation สงวนลิขสิทธิ์. นั่นคือไม่มีอะไรเพิ่มเติมหลังจากนั้น
Monomeeth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.