PowerShell中获取项目VersionInfo.ProductVersion不正确/ WMI相

2019-07-30 00:58发布

我试图理解为什么PowerShell的还是会回到一个不同的版本号比什么都从Windows资源管理器的文件属性页面中的DLL文件,一个WMI查询显示。 (我提前道歉,如果这不正确限定的编码问题。)

场景:

运行以下PowerShell命令:

(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo.ProductVersion

这将返回以下内容:

6.1.7600.16385

但是,此版本号不正确。 当检查从Windows资源管理器的版本信息,您将看到以下版本(对不起,我试图张贴的一小截屏,但我没有足够的代表,我是新来的):

6.1.7601.17767

另外,WMIC查询显示的结果相同Windows资源管理器:

WMIC path CIM_DataFile WHERE (name="c:\\windows\\system32\\rdpcorekmts.dll") get Version

WMIC结果:

6.1.7601.17767

我真的不明白为什么他们会有所不同。 我真的想回到使用PowerShell此值,但现在我不知道如果我只是忽视的东西,或者如果我碰到某种奇怪的bug跑,但是这两种方法之间的版本不匹配是混乱的。 作为一个说明,我已经在运行方式变化,以获得此回在PowerShell中(如GET-ItemChild和Get-ItemProperty),我也得到相同的版本不正确的结果。

为什么任何想法?

Answer 1:

问题是,你正在使用ProductVersion propertie这似乎某处被硬编码,IE和WMI只是从buildind产品版本:

ProductMajorPart   : 6
ProductMinorPart   : 1
ProductBuildPart   : 7601
ProductPrivatePart : 17767

同样的FileVersion有:FileMajorPart,FileMinorPart,FileBuildPart,FilePrivatePart

试一试 :

(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo | fl *

您可以测试:

(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo | % {("{0}.{1}.{2}.{3}" -f $_.ProductMajorPart,$_.ProductMinorPart,$_.ProductBuildPart,$_.ProductPrivatePart)}

从CMD.EXE你可以试试:

C:\>powershell -command "&{(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo | % {write-host ('{0}.{1}.{2}.{3}' -f $_.ProductMajorPart,$_.ProductMinorPart,$_.ProductBuildPart,$_.ProductPrivatePart)}}"


文章来源: Powershell get-item VersionInfo.ProductVersion incorrect / different than WMI