在Windows中使用Win32_NTLogEvent类的相关登录和注销事件



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

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

查询运行良好,并为我带来了所有相关的登录和注销响应。问题是:我如何将这两个事件关联起来?我的意思是,我如何将哪个注销与某个登录事件链接起来?

分析事件4648(登录尝试)和4634(帐户已注销)的(不太清楚)文档,考虑到4648事件的SubjectLogonId和4634事件的TargetLogonId,这两个事件似乎都有链接的Id。

考虑到这些信息,我正在分析返回的事件,从InsertionStrings中获取ID,并试图找到链接的ID,但我没有找到任何ID。

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

我在Windows 10和Windows Server 2012中测试了它,但我正在寻找能在尽可能多的版本中工作的东西。

一些背景:

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

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

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

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

您应该查找的事件是4624"帐户已成功登录。",该事件的Logon ID将与4634"帐户被注销"的Logon ID相关。

要评论您的"LastLogon,LastLogoff"背景语句,这些值在每次登录或注销时都会在active directory中更新,但不会保留任何历史记录。

我知道WBEM接口从Windows XP开始就存在了,我找不到证据证明你的powershell查询可以在该平台上工作,但是,它们应该在Windows 7+和Server 2008+上不需要修改就可以工作。

在windows vista(或windows server 2008)及以上版本中,此PowerShell命令应能完成

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

然而,如果你想使用支持Windows XP的Win32_NTLogEvent类,我认为这是不可能的,因为有两个原因

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

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

最后,正如您可能已经注意到的,审计事件(如4648447)支持Windows 10(或Windows Server 2016)

最新更新