我想获取本地用户帐户的创建日期(如果重要的话,是 Win 7)。我查看了以下 WMI 对象(当然还有 Google):
Win32_UserAccount
Win32_NetworkLoginProfile
返回的对象NetworkLoginProfile
有上次登录时间,但没有创建日期。检查Date Created
其配置文件文件夹的属性仅给出创建日期文件夹创建了该帐户,而不一定创建了帐户本身。
答案1
这些数据在 SAM 中,但微软似乎没有公开记录这些数据,而且我也没有找到官方 API 来检索这些数据。我可以看到,chntpw
实用程序的源代码该值存储在每个帐户的“F”注册表项中。源代码如下:
#define USER_F_PATH "\\SAM\\Domains\\Account\\Users\\%08X\\F"
struct user_F {
...
char t_creation[8]; /* Time of account creation */
...
}
这再夹持器取证项目有一个插件,桑帕斯这将报告帐户的创建日期。
取证工具可能不是您想要的,但看起来微软并没有让它变得简单。
在研究这个问题时,我发现一个有趣的现象:Microsoft MVP 不知道帐户创建数据存储在 SAM 中对他有利的可能是他没有离开这个chntpw
实用程序,而这正是我开始搜索有关未记录的 SAM 结构的信息的地方。
答案2
唯一真正知道的方法是在计算上启用帐户管理审计r 帐户创建时。然后,您会在创建日期的事件日志中看到 EventID 4720。(文章中说的是 Active Directory,但同样适用于本地帐户;我检查过了。)
如果没有这个,您最接近的方法就是检查用户注册表配置单元、ntuser.dat
文件、用户配置文件夹等的创建日期,但正如评论中提到的,这只对于用户首次登录是准确的,因为那是创建这些东西的时间。
不幸的是,这是一个“如果您没有记录,那么该信息就不存在”的情况。
答案3
我原本打算给你一个 POC PowerShell 脚本来提取和解析创建时间,但我意识到 的chntpw
逻辑是错误的。它调用的创建时间值实际上是密码上次设置时间,尽管这些值在初始创建帐户时是相同的。请参阅这里了解有关 SAM 的详尽描述。
Evan 的第二个链接,对于samparse
,可能是正确的。看看它确实有效。如果你看看它的源代码这里,第 99 行:
$c_date = $create->get_timestamp();
get_timestamp
您会看到它从 Perl 的调用Parse::Win32Registry
。我非常确定这实际上是密钥的最后写入时间。由于看起来特定密钥 ( HKLM\SAM\SAM\Domains\Account\Users\Names\<USERNAME>
) 仅包含指向相应 RID 密钥的指针,因此它在创建后不应更改,并且最后写入时间将等于创建时间。
如果您想继续使用更多内置工具,这里有一系列脚本专家文章解释如何通过 PowerShell 进行操作:
答案4
通过“我的电脑”导航至
C:\Users,您将看到本地计算机上列出的所有用户帐户。您可以右键单击相应的用户帐户并转到属性,它将显示创建日期,这应该与用户帐户的创建日期相同
仅代表我个人观点