我正在尝试从Win32_NTLogEvent类中获取登录和注销事件。为此,我使用以下WMI查询:
PATH Win32_NTLogEvent WHERE "(EventIdentifier = 4648 OR EventIdentifier = 4647 OR EventIdentifier = 4634) And TimeGenerated > '201811010000'" GET /ALL
查询工作正常,并为我带来了所有相关的登录和注销信息。问题是:如何关联两个事件?我的意思是,我该如何链接与某个登录事件相关联的注销?
分析事件4648(尝试登录)和4634(帐户已注销)的文件(尚不十分清楚),考虑到{{1 }}用于4648事件,SubjectLogonId
用于4634事件。
考虑到这些信息,我正在解析返回的事件,从InsertionStrings中获取ID,并尝试找到链接的ID,但没有找到任何链接。
我误解了某些东西还是在寻找错误的信息?
我在Windows 10和Windows Server 2012中都对其进行了测试,但我正在寻找可以在尽可能多版本中使用的东西。
一些背景:
简而言之,我想知道某些特定日期的登录/注销时间和会话持续时间。我可以使用以下WMI查询(Win32_NetworkLoginProfile类)来获取特定用户的登录和注销时间:
TargetLogonId
我对第一个查询的意图几乎是相同的,但是我希望在不知道每个用户名的情况下为所有用户提供信息。我最好的猜测是如上所述使用Win32_NTLogEvent类,但这不是强制性的。
答案 0 :(得分:1)
您正在尝试使用4648登录尝试。此事件仅表示已尝试,以及是否成功。
您应查找的事件为4624“一个帐户已成功登录。”,该事件的Logon ID
将与4634“一个帐户”的Logon ID
相关联已注销。”
要评论您的“ LastLogon,LastLogoff”背景声明,这些值会在每次“登录”或“注销”时在活动目录中更新,但不会保留任何历史记录。
我知道WBEM界面自Windows XP以来就已经存在,我找不到能证明您的Powershell查询可以在该平台上运行的证据,但是,它们无需修改就可以在Windows 7+和Server 2008+上运行。
答案 1 :(得分:1)
在Windows Vista(或Windows Server 2008)及更高版本中,此PowerShell命令应该可以解决问题
Get-WmiObject -Query "select Name, LastLogon, LastLogoff from Win32_NetworkLoginProfile WHERE {your logic here}"
但是,如果您想使用支持Windows XP的Win32_NTLogEvent
类,由于两个原因,我认为无法完成
该类中的EventIdentifier指定有关事件类型的元数据,该数据可以是1-5,表示错误,警告,信息,安全审核成功和安全审核失败。然后您应该查看EventCode
,这将使我引申到第二点
来自同一来源的两个事件可能对此属性具有相同的值,但可能具有不同的严重性和EventIdentifier值。例如,成功注销记录在安全日志中的事件ID为538。但是,事件ID不一定是唯一的。很有可能在检索事件ID 538时,可以获得其他类型的ID 538的事件。如果发生这种情况,则可能需要按源和ID进行过滤。
最后,您可能已经注意到审计事件(例如4648、4647)支持Windows 10(或Windows Server 2016)