将LastLogon转换为DateTime格式

Pic*_*kle 21 powershell active-directory

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

- 显示名称-Country -Manager名称 - 最后登录日期

我正在运行以下脚本,除了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
Run Code Online (Sandbox Code Playgroud)

lat*_*kin 41

DateTime.FromFileTime 应该做的伎俩:

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

Monday, October 15, 2012 3:13:05 PM
Run Code Online (Sandbox Code Playgroud)

然后,根据您要格式化的方式,查看标准自定义日期时间格式字符串.

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

如果您想将其整合到单行中,请将您的select陈述更改为:

... | Select Name, manager, @{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}} | ...
Run Code Online (Sandbox Code Playgroud)


Sha*_*evy 8

Get-ADUser -Filter {Enabled -eq $true} -Properties Name,Manager,LastLogon | 
Select-Object Name,Manager,@{n='LastLogon';e={[DateTime]::FromFileTime($_.LastLogon)}}
Run Code Online (Sandbox Code Playgroud)

  • 抱歉发了两次帖子,但我自己找到了答案。对于其他好奇的人来说,它被称为计算属性。N = 名称,E = 表达式。 (3认同)
  • 如果从 @HiTech 的评论中不清楚,“N”和“E”是 PowerShell 识别的简写,相当于实际分别使用“Name”和“Expression”作为哈希表的键定义计算属性。 (2认同)

小智 6

LastLogon是最后一次用户登录到您运行GET-ADUser cmdlet时负载均衡到的任何域控制器,并且该用户没有跨域复制。如果需要最后一位用户登录域中任何域控制器的时间,则确实应该使用LastLogonTimestamp。

  • 这是真的,但还应该注意的是,LastLogonTimeStamp 并非 100% 准确。LastLogonTimeStamp 最多有 9-14 天不准确。要获得真正的 LastLogon,您必须在域中的所有域控制器上查询帐户的 LastLogon 属性 (2认同)