网络用户信息 VS Get-ADUser

网络用户信息 VS Get-ADUser

关于 Net User 和 Get-ADUser 的不同输出的非常普遍的问题。

当我运行每个命令时,幕后到底发生了什么?我之所以提出这个问题,是因为对于LastLogonDate任何运行这两个命令的用户帐户,都会得到不同的结果。例如:

  1. Get-ADUser -Identity "Abe" -Properties LastLogonDate(返回 2021 年 2 月 8 日)

  2. Net user "Abe" /Domain(返回 2021 年 2 月 11 日)

那么,到底发生了什么?我尝试使用,ADSI但它返回的信息与 相同Get-ADUser。如果这与 SO 的目的完全无关,请随时关闭它,我会在其他地方询问。

谢谢你!

答案1

返回的 lastLogonDate 属性Get-ADUser映射到 AD 中的 lastLogonTimestamp 属性,该属性被复制但并不完全准确。请参阅描述这里

Net User 指的是 AD 属性 lastLogon。该属性准确,但无法在域控制器之间复制。引用

请注意,此值不会在域控制器之间复制 - 如果您想知道具有多个域控制器的域中帐户的确切上次登录时间,则必须在所有域控制器上检查此值!

有许多脚本可以收集域控制器并循环它们,然后返回找到的最新值。您可以检查这个答案和讨论了解一些见解。请注意,我们正在解决脚本的性能问题,但仍然有代码示例。

特别有趣的是,这两个属性都存储为 64 位整数,表示自 1/1/1601 12:00 以来的 100 纳秒间隔数,而其他答案中没有提到。但是,Get-ADUser不会将 lastLogon 转换为典型[DateTime]值。此外,它存储为 UTC,必须转换为本地时间,类似于下面的代码说明了这一点:

Get-ADUser saporito -properties 'LastLogonDate','LastLogon' | 
Select *,@{Name = 'logonDate'; Expression = { [DateTime]::FromFileTimeUtc( $_.LastLogon ).ToLocalTime()}}

注意:Net User似乎执行相同的转换。

注意:我添加了一个属性,而不是覆盖它。这只是为了演示,可能需要适配到更大的项目中。

相关内容