我想获取本地用户帐户的创建日期(如果重要的话,Win 7)。我查看了以下 WMI 对象(当然还有 google):
Win32_UserAccount
Win32_NetworkLoginProfile
从返回的对象NetworkLoginProfile
具有上次登录时间,但没有创建日期。检查Date Created
其个人资料文件夹的属性仅给出该文件夹的创建日期,而不一定是帐户本身。
我想获取本地用户帐户的创建日期(如果重要的话,Win 7)。我查看了以下 WMI 对象(当然还有 google):
Win32_UserAccount
Win32_NetworkLoginProfile
从返回的对象NetworkLoginProfile
具有上次登录时间,但没有创建日期。检查Date Created
其个人资料文件夹的属性仅给出该文件夹的创建日期,而不一定是帐户本身。
数据在 SAM 中,但似乎没有被微软公开记录,我也没有找到官方 API 来检索它。我可以看到,查看该实用程序的源代码
chntpw
,该值存储在每个帐户的“F”注册表项中。引用源代码:regripper取证项目有一个插件,samparse ,它将报告帐户创建日期。
取证工具可能不是您想要的,但看起来微软并没有让它变得容易。
在对此进行研究时,我确实发现Microsoft MVP 不知道帐户创建数据存储在 SAM 中确实很有趣。为了他的利益,也许他并没有离开该
chntpw
实用程序,这是我开始搜索有关未记录的 SAM 结构信息的地方。真正知道的唯一方法是在创建帐户时在计算机上启用帐户管理审核。然后,您会在创建日期的事件日志中看到 EventID 4720。(文章说 Active Directory,但同样适用于本地帐户;我检查了。)
没有它,您最接近的方法是检查用户注册表配置单元、
ntuser.dat
文件、用户配置文件文件夹等的创建日期,但正如评论中提到的,这仅对用户的第一次登录是准确的,因为那是那些事情被创建。对您来说不幸的是,这是“如果您没有记录,那么该信息不存在”的情况。
我正准备给你一个 POC PowerShell 脚本来提取和解析创建时间,但我意识到它
chntpw
的逻辑是不正确的。它称为创建时间的值实际上是密码上次设置的时间,尽管这些值在初始帐户创建时是相同的。有关 SAM 的详尽描述,请参见此处。不过,Evan 的第二个链接 for
samparse
可能会正确。看看它确实有效。如果你在这里查看它的来源,第 99 行:你会看到它
get_timestamp
从 Perl 的Parse::Win32Registry
. 我很确定这实际上是密钥的最后一次写入时间。由于特定键 ( ) 似乎HKLM\SAM\SAM\Domains\Account\Users\Names\<USERNAME>
仅包含指向相应 RID 键的指针,因此它不应在创建后更改,并且最后写入时间将等于创建时间。如果您想坚持使用更多内置工具,这里有一系列 Scripting Guy 文章,解释了如何通过 PowerShell:
使用 PowerShell 访问注册表上次修改时间戳
重用 PowerShell 注册表时间戳代码
创建代理函数以显示注册表项时间戳
通过 PowerShell 利用注册表键时间戳
powershell 中的这个命令应该可以解决问题:
通过我的电脑导航到
C:\Users,您将看到本地计算机上列出的所有用户帐户。您可以右键单击相应的用户帐户并转到属性,它将显示创建日期,这应该与用户帐户的创建相同
只是我的 2 美分