2013-10-03 35 views
1

我使用Powershell从AD中提取简单数据。该脚本拉从文本文件中的用户名和类似于:一年错误使用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,约翰·史密斯, JSMITH @ company.com,130252373811789928,0413 10月2日

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

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

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

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

我无法想象为什么会发生这种情况。 Powershell正在从Windows 7系统运行,并且我尝试了使用ISE和powershell命令。

回答

3

你可以尝试:

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

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

在与时间处理的ActiveDirectory微软细节attibuts存储为Windows文件的时间。这是一个64位值,表示从1601年1月1日午夜12:00点(C.E.)协调世界时(UTC)开始经过的100纳秒间隔的数量。

+0

哦,我发现http://en.wikipedia.org/wiki/1601它指定它只是登录时间这样工作。对不起,我正在重新编辑这个评论,因为我没有仔细阅读! – Debra

+0

是的,那可行,谢谢!我为这个草率的评论道歉。 – Debra