5

我正在尝试从Win32_NTLogEvent类中获取登录和注销事件。为此,我使用以下 WMI 查询:

PATH Win32_NTLogEvent WHERE "(EventIdentifier = 4648 OR EventIdentifier = 4647 OR EventIdentifier = 4634) And TimeGenerated > '201811010000'" GET /ALL

该查询运行良好,并为我带来了所有相关的登录和注销。问题是:我怎样才能把这两个事件联系起来?我的意思是,如何将哪个注销与某些登录事件相关联?

分析事件4648(登录尝试)和4634 (帐户已注销)的(不太清楚)文档,看起来两者都有一个链接的 Id,考虑SubjectLogonId到 4648 事件和TargetLogonId4634 事件。

考虑到这些信息,我正在解析返回的事件,从 InsertionStrings 中获取 Id 并尝试找到链接的 Id,但我没有找到。

是我误解了什么还是我在寻找错误的信息?

我在 Windows 10 和 Windows Server 2012 中对其进行了测试,但我正在寻找可以在尽可能多的版本中运行的东西。

一些背景:

简而言之,我想知道某些特定日期的登录/注销时间和会话持续时间。我能够使用以下 WMI 查询( Win32_NetworkLoginProfile类)获取特定用户的登录和注销时间:

PATH Win32_NetworkLoginProfile WHERE "Name='DOMAIN\\user'" GET LastLogon, LastLogoff

我对第一个查询的意图几乎相同,但我想要所有用户的信息而不知道每个用户名。我最好的猜测是使用描述的 Win32_NTLogEvent 类,但这不是强制性的。

4

2 回答 2

2

您正在尝试使用 4648 登录尝试。此事件仅表示进行了尝试以及是否成功。

您应该查找的事件是4624 “帐户已成功登录。”,Logon ID该事件的事件将与Logon ID4634“帐户已注销”相关联。

要评论您的“LastLogon,LastLogoff”背景声明,这些值会在每次登录或注销时在活动目录中更新,但不会保留任何历史记录。

我知道 WBEM 接口自 Windows XP 以来就存在,我找不到证据证明您的 powershell 查询可以在该平台上运行,但是,它们应该可以在 Windows 7+ 和 Server 2008+ 上运行而无需修改。

于 2019-01-02T06:32:19.657 回答
1

在 windows vista(或 windows server 2008)及以上版本中,这个 PowerShell 命令应该可以解决问题

Get-WmiObject -Query "select Name, LastLogon, LastLogoff from Win32_NetworkLoginProfile WHERE {your logic here}"

但是,如果您想使用Win32_NTLogEvent支持 Windows XP 的类,我认为无法完成,原因有两个

  1. 该类中的 EventIdentifier 指定有关事件类型的元数据,可以是 1-5,这意味着:错误、警告、信息、安全审计成功和安全审计失败。你应该看看EventCode是什么让我想到了我的第二点

  2. 来自同一源的两个事件可能对此属性具有相同的值,但可能具有不同的严重性和 EventIdentifier 值。例如,成功的注销记录在安全日志中,事件 ID 为 538。但是,事件 ID 不一定是唯一的。有可能在检索事件 ID 538 时,您可以获得 ID 为 538 的其他类型的事件。如果发生这种情况,您可能需要按源和 ID 进行过滤。

最后,您可能已经注意到审核事件(如 4648、4647)支持 Windows 10(或 Windows Server 2016)

于 2019-01-02T06:58:21.807 回答