使用Powershell脚本从AD中提取日期的错误年份

时间:2013-10-03 01:47:21

标签: powershell active-directory

我正在使用Powershell从AD中提取简单数据。该脚本从文本文件中提取用户名,类似于:

Import-Module ActiveDirectory

Get-Content c:\temp\userlist.txt | Foreach-Object {
$user = $_
$fullname = (Get-ADuser -identity $user | foreach {$_.Name})
$email = (Get-ADUser -identity $user -properties * | foreach {$_.mail})
$lastlog = (Get-ADUser -identity $user -properties * | foreach {$_.lastLogon})
$lastlogstr = (Get-Date -format "yyyy MMM d" $lastlog)
"$user,$fullname,$email,$lastlog,$lastlogstr"
}

当我运行它时,会拉出所有正确的数据,我会看到(例如)

XXXXX,John Smith,jsmith @ company.com,130252373811789928,0413 10月2日

当我检查Active目录,并使用属性编辑器查看“lastLogon”时,我看到

2013年10月2日下午8:29:41中部夏令时

如果我点击查看该字段,我会看到130252373811789928,如上所示。

但对于我查询的绝对每个用户,无论我如何格式化日期(即如上所述,使用D等),它总是在0413而不是2013年。同样,它显示了2011年的0411等

我无法想象为什么会这样。 Powershell正在从Windows 7系统运行,我尝试使用ISE和powershell命令。

1 个答案:

答案 0 :(得分:3)

你可以尝试:

$date = [datetime]::fromfiletime($lastlog)
$date.ToString("yyyy MMM d")

$date = [datetime]::FromFileTimeUtc($lastlog)
$date.ToString("yyyy MMM d")

在ActiveDirectory中,处理时间的Microsoft细节attibuts存储为Windows文件时间。它是一个64位值,表示自公元1601年1月1日午夜12点(美国东部时间)协调世界时(UTC)以来经过的100纳秒间隔的数量。