我创建了一个新的 AD 字段,我想将用户的出生日期保存在我们的 AD 中...
我们通过 Powershell 脚本进行创建,但由于日期格式,我在保存此字段时遇到问题...我认为 AD 保存为 yyyymmddhhmmss 格式,但我不知道如何转换为这个值...
有人有想法吗?我当前的代码是:
$MyDateVar= '19830613000000'
Set-ADUser $samaccountname -replace @{MyField=datetime]::fromFileTime($MyDateVar)}
它保存了日期,但是像 23/01/01 22:51:01 而不是 1983/06/13 00:00:00
答案1
一些问题:
首先,您的示例中缺少方括号datetime]
。我猜这只是一个转录错误。
您似乎正在尝试使用 FileTime,但带有连接的字符串。FileTime 指的是特定类型的值,即“一个 64 位值,表示自 1601 年 1 月 1 日午夜 12 点以来经过的 100 纳秒间隔数”。
事实上,您提到的结果就是将日期保存为 23/01/1601(或字面意思)01/01/1601 + (19830613000000 * 100ns)
。
FileTime 是 Active Directory 在日期字段中期望的内容,因此您实际上想要转换到FileTime,不是来自。
根据您获取数据的方式,您可以在导入之前或调用期间对其进行转换 - 以下是拆分日期字符串的垃圾示例:
$MyDateVar= '19830613000000'
$Birthday = @{
Year = -join$MyDateVar[0..3]
Month = -join$MyDateVar[4..5]
Day = -join$MyDateVar[6..7]
Hour = 0
Minute = 0
Second = 0
}
$BirthdayFileTime = (Get-Date @Birthday).ToFileTime()
Set-ADUser $SAMAccountName -Replace @{Birthday=$BirthdayFileTime}