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

PowerShell注册表日期字符串转换失败:ParseExact无法转换日期

解决ParseExact日期转换失败及后续时间计算问题

核心问题及原因

  1. 注册表值获取方式错误:Select-Object 'Dummy'返回的是带有Dummy属性的自定义对象,不是纯字符串,导致后续无法直接用于日期转换(错误提示中@{dummy=2022-10-18T12:40:25}就是对象的字符串表示)。
  2. 日期格式字符串不匹配:你用的dd/MM/yyyy HH:mm和目标字符串2022-10-18T12:40:25的格式完全不符,且ParseExact的第一个参数必须是字符串,不能是对象。
  3. 变量未正确更新:即使日期转换成功,你也没把结果存回$startdate,导致New-TimeSpan依然用原始对象而非日期类型。

修正后的代码

# 提取注册表中Dummy属性的纯字符串值
$startdateStr = Get-ItemProperty -Path 'HKLM:SOFTWARE\Adobe\Acrobat Distiller\DC\Installer\' | Select-Object -ExpandProperty Dummy

# 转换为DateTime对象(ISO8601格式可直接转换)
$startdate = [datetime]$startdateStr

# 若要显式用ParseExact,需匹配正确格式
# $startdate = [datetime]::ParseExact($startdateStr, 'yyyy-MM-ddTHH:mm:ss', $null)

$today = [datetime]::Now
$timeSpan = New-TimeSpan -Start $startdate -End $today
"{0} days have passed since {1}" -f $timeSpan.Days, $startdate.ToString('yyyy-MM-dd HH:mm:ss')

关键细节

  • Select-Object -ExpandProperty Dummy会直接返回属性的实际值,而非包含属性的对象,解决后续类型不匹配问题。
  • 你的目标字符串是标准ISO8601格式,PowerShell支持直接将其转换为DateTime类型,无需额外指定格式;如果一定要用ParseExact,格式字符串必须严格对应:yyyy-MM-ddTHH:mm:ss。
  • 必须将转换后的日期对象赋值给$startdate,确保New-TimeSpan能正确识别日期参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:05:19