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
相关产品推荐
相关产品推荐

