Powershell获取项目VersionInfo.ProductVersion不正确/与WMI不同

Powershell获取项目VersionInfo.ProductVersion不正确/与WMI不同,powershell,wmi-query,wmic,versioninfo,Powershell,Wmi Query,Wmic,Versioninfo,我试图理解为什么Powershell会为DLL文件返回与Windows资源管理器的文件属性页和WMI查询显示的版本号不同的版本号。(如果这不是一个正确的编码问题,我提前道歉。) 情景: 正在运行以下powershell命令: (get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo.ProductVersion 这将返回以下内容: 6.1.7600.16385 但是,此版本号不正确。在检查Windows资源管理器中的版本信息时,您会看

我试图理解为什么Powershell会为DLL文件返回与Windows资源管理器的文件属性页和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返回这个值,但是现在我不确定我是否忽略了什么,或者是否遇到了某种奇怪的错误,但是这两种方法之间的版本不匹配令人困惑。需要注意的是,我已经在方法上运行了一些变体,以便在Powershell中重新获取此内容(例如get-ItemChild和get-ItemProperty),并且得到了相同的错误版本结果


有什么想法吗?

问题是您使用的是
ProductVersion
属性,它似乎是硬编码的,IE和WMI只是从以下位置构建产品版本:

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)}}"

可以获得相当多的版本(程序集版本、文件版本、产品版本)。您确定差异是针对同一属性的吗?您的解决方案非常有效--谢谢。我很感激你花时间把答案解释得如此透彻。非常感谢!还有一个问题:有没有办法通过Windows cmd行来实现这一点?e、 g.powershell-Command“&(获取项C:\windows\system32\rdpcorekmts.dll).VersionInfo |%{(“{0}.{1}.{2}.{3}”-f$\\ ProductMajorPart,$\ ProductMinorPart,$\ ProductBuildPart,$\ ProductPrivatePart)}”