2013-10-03 34 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