2012-06-18 42 views
4

我想了解爲什麼Powershell會爲DLL文件取回不同於Windows資源管理器的文件屬性頁和WMI查詢的不同版本號。 (我提前道歉,如果這不正確限定的編碼問題。)Powershell獲取項VersionInfo.ProductVersion不正確/不同於WMI

場景:

運行以下PowerShell命令:

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

這將返回以下:

6.1.7600.16385

何wever,這個版本號是不正確的。當從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)中,並且得到相同的錯誤版本結果。

任何想法爲什麼?

+0

有可以得到相當多的版本(集版本,文件版本,產品版本)。你確定這個差異是出於同一個屬性嗎? –

回答

8

的問題是,你正在使用的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)}}" 
+0

您的解決方案效果很好 - 非常感謝您。我很感激你花時間來徹底解釋答案。多謝! – jschleicher

+0

還有一個問題:有沒有辦法通過Windows cmd行來完成這項工作?例如PowerShell命令「(獲取項目C:\ windows \ system32 \ rdpcorekmts.dll).VersionInfo |%{(」{0}。{1}。{2}。{3}「-f $ _。ProductMajorPart, $ _。ProductMinorPart,$ _ ProductBuildPart,$ _ ProductPrivatePart)}「 – jschleicher

+0

我在答案中添加一行 – JPBlanc