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

