1

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。同样,它显示 0411 表示 2011 等。

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

4

1 回答 1

3

你能试一下吗 :

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

或者

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

在 ActiveDirectory 中,处理时间的 Microsoft 特定属性存储为 Windows 文件时间。它是一个 64 位值,表示自 1601 年 1 月 1 日 (CE) 协调世界时 (UTC) 午夜 12:00 以来经过的 100 纳秒间隔数。

于 2013-10-03T03:26:19.243 回答