我之前在 Stack Exchange 上得到过这个命令:
wevtutil qe System /rd /f:Text | findstr "4800 4801"
我得到了大量的输出,格式各异。大部分看起来像:
Date: 2020-11-17T17:44:03.5480000Z
Date: 2020-11-17T17:43:50.8480000Z
Date: 2020-11-16T01:36:04.9480000Z
...
这些数字应该是“最后锁定”或“最后解锁”事件。它们是不是。当我锁定/解锁机器并重新运行命令时,它们不会更新。它们似乎指的是登录/注销时间。
如果我使用:
wevtutil qe System /rd /f:Text | findstr "7001 7002"
然后我只得到无意义的输出,例如:
Event ID: 7001
Event ID: 7002
Event ID: 7001
到目前为止,我已经执行了上百万个不同的wevtutil
命令,并无休止地阅读神秘的帮助页面/网页以及旧的 SE 问题。我一直对这个命令得到的无意义且不断变化的输出感到困惑。到目前为止,感觉我已经尝试过了一切。该命令和整个“事件日志”似乎从根本上就不可靠,甚至不一致。我真的不知道该怎么做,微软支持页面让我感觉就像在阅读来自另一个世界的外星人写的文字。
一定有更好、更合适的方法来简单地获取机器上次锁定/解锁的时间……对吧?我只是不明白这为什么会成为问题。难道没有一个单一、定义明确的“Windows API”可以在命令行上执行,以便从 Windows 中获取类似的基本统计信息/信息,而无需了解其内部结构吗?
我如何简单地获取当前用户上次锁定或解锁(两者均可,但两者结合最佳)机器的日期/时间/时间戳?
答案1
首先,您需要确保记录这些事件。打开 secpol.msc,转到本地计算机上的高级审核策略、系统审核策略、登录/注销,在其中配置“审核其他登录/注销事件”,以便记录成功事件。我是新手,所以 SE 阻止了我的图片,希望您可以在下面访问它。一旦启用,这些事件将开始被记录,如果它被禁用,您将不会记录任何事件。
要查看刚刚锁定的时间:
wevtutil qe Security /q:"*[System[(EventID=4800)]]" /f:Text | findstr "Date"
查看刚刚解锁的时间:
wevtutil qe Security /q:"*[System[(EventID=4801)]]" /f:Text | findstr "Date"
要查看锁定和解锁时间:
wevtutil qe Security /q:"*[System[(EventID=4800 or EventID=4801)]]" /f:Text | findstr "Date"
但是,上述命令不会按当前用户进行过滤,这会为您提供所有本地用户的日志。不幸的是,这些日志不会将当前用户存储在用户字段中,奇怪的是,它存储在详细信息中,因此无法使用它提供的简单查询轻松过滤它们。如果您删除| findstr "日期"从上述任何命令中,您都将获得日志的完整详细信息,而不仅仅是时间,并且您可以使用其他内容来使用详细信息字段中的“帐户名称:”来过滤您想要查看的用户。