You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell操作AD自定义字段:出生日期存储格式问题求助

解决AD自定义日期字段赋值的格式问题

哦,我一眼就看出问题所在了——你误用了fromFileTime方法!这个方法需要的是64位整数类型的文件时间戳(也就是从1601年1月1日开始计算的100纳秒间隔数),但你传入的是一个yyyymmddhhmmss格式的字符串,这完全不是它能处理的输入类型,难怪得到了完全不对的日期结果。

正确的解决步骤

要把你的字符串日期正确转换成AD能识别的格式,需要两步走:

  • 先把yyyymmddhhmmss格式的字符串解析成标准的DateTime对象
  • 再将这个DateTime对象转换成AD日期属性所需的FileTime数值

修正后的PowerShell代码

# 你的原始日期字符串(yyyymmddhhmmss格式)
$MyDateStr = '19830613000000'
# 严格按照指定格式解析为DateTime对象,避免区域设置干扰
$MyDate = [datetime]::ParseExact($MyDateStr, 'yyyyMMddHHmmss', $null)
# 将DateTime转换为AD认可的FileTime数值,再赋值给自定义字段
Set-ADUser $samaccountname -replace @{MyField = $MyDate.ToFileTime()}

额外说明

  • 使用ParseExact而不是普通的Parse,是为了强制按照你指定的yyyyMMddHHmmss格式解析,避免因系统区域设置不同导致的解析错误(比如有的区域会把日期解析成dd/mm/yyyy)
  • AD的日期类型属性本质上存储的是FileTime数值,所以必须用ToFileTime()方法转换后再赋值,这样AD才能正确识别并显示为你预期的1983/06/13 00:00:00

你可以先单独测试转换逻辑验证结果:

$MyDateStr = '19830613000000'
$MyDate = [datetime]::ParseExact($MyDateStr, 'yyyyMMddHHmmss', $null)
# 输出对应的FileTime数值
$MyDate.ToFileTime()

这个数值就是AD能正确识别的格式,赋值后就能解决你的问题啦!

内容的提问来源于stack exchange,提问作者brusilva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:12:51