27

我的目标是从我的域中获取包含以下信息的用户列表:

-显示名称 -国家 -经理姓名 -上次登录日期

我正在运行以下脚本,除了 LastLogon 之外,一切看起来都不错。它将时间输出为一堆随机数,如“129948127853609000”。如何将其转换为 DateTime 格式?

Search-ADAccount -UsersOnly -SearchBase "OU=International,DC=mycompany,DC=com" -AccountDisabled:$false | Get-ADUser -Properties Name, manager, LastLogon | Select Name, manager, LastLogon | export-csv C:\Australia.csv -NoTypeInformation
4

5 回答 5

56

DateTime.FromFileTime应该做的伎俩:

PS C:\> [datetime]::FromFileTime(129948127853609000)

Monday, October 15, 2012 3:13:05 PM

然后根据您要如何格式化它,检查标准自定义日期时间格式字符串。

PS C:\> [datetime]::FromFileTime(129948127853609000).ToString('d MMMM')
15 October
PS C:\> [datetime]::FromFileTime(129948127853609000).ToString('g')
10/15/2012 3:13 PM

如果您想将其集成到您的单行中,请将您的select声明更改为:

... | Select Name, manager, @{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}} | ...
于 2012-10-26T17:43:53.783 回答
13
Get-ADUser -Filter {Enabled -eq $true} -Properties Name,Manager,LastLogon | 
Select-Object Name,Manager,@{n='LastLogon';e={[DateTime]::FromFileTime($_.LastLogon)}}
于 2012-10-26T18:19:45.717 回答
6

LastLogon 是用户最后一次登录到您在运行 GET-ADUser cmdlet 时碰巧负载平衡到的任何域控制器,并且不会跨域复制。如果您想要最后一个用户登录到您域中任何域控制器的时间,您真的应该使用 LastLogonTimestamp。

于 2014-09-17T18:50:32.790 回答
2

使用LastLogonDate属性,您不必转换日期/时间。 转换时lastLogonTimestamp应等于LastLogonDate。这样,您将获得整个域的最后登录日期和时间,而无需转换结果。

于 2015-04-29T05:35:57.640 回答
0

重要的是要知道 LastLogonDate 不会被复制。LastLogonTimestamp 非常重要,因此在大型域上使用时间戳很重要

于 2021-12-10T19:39:19.070 回答