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

解析Cim_BIOSElement中的日期:与WMI等效结果存在差异

解决Cim_BIOSElement日期与WMI格式一致的问题

这个问题核心是WMI和CIM返回日期的类型差异导致的,我来给你一步步拆解解决方法:

先搞懂两者的差异

  • WMI的Win32_BIOS返回的ReleaseDate是字符串类型的UTC日期,格式固定为yyyyMMddHHmmss.ffffff+000,所以转JSON后直接就是这个字符串。
  • CIM的CIM_BIOSElement返回的ReleaseDate是强类型的DateTime对象:
    • 直接看$a.Value时,PowerShell会自动把它转成你的本地时间显示;
    • 转JSON时,会用.NET标准的JSON日期格式(也就是\/Date(时间戳)\/这种形式)。

解决思路

我们需要把CIM返回的DateTime对象先转换为UTC时间,再按照WMI的格式输出字符串,之后转JSON就能得到和WMI完全一致的结果了。

具体代码实现

方法一:直接获取CIM属性(更简洁)

不用遍历CimInstanceProperties,直接获取日期属性处理:

# 获取CIM BIOS的发布日期(得到DateTime对象)
$biosReleaseDate = (Get-CimInstance CIM_BIOSElement).ReleaseDate

# 转换为UTC时间,再格式化为WMI的目标格式
$wmiStyleDate = $biosReleaseDate.ToUniversalTime().ToString("yyyyMMddHHmmss.ffffff+000")

# 转成JSON,结果和WMI的输出一致
$wmiStyleDate | ConvertTo-Json

方法二:基于你已有的$a对象处理

如果你已经通过遍历CimInstanceProperties得到了$a,可以直接用它的Value属性处理:

# 把DateTime对象转UTC并格式化
$formattedDate = $a.Value.ToUniversalTime().ToString("yyyyMMddHHmmss.ffffff+000")

# 转JSON验证
$formattedDate | ConvertTo-Json

验证结果

执行上面的代码后,你会得到和WMI完全一致的JSON输出:"20171221000000.000000+000"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:01:55