6

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を使用してこの値を返したいのですが、何かを見落としているのか、ある種の奇妙なバグに遭遇したのかはわかりませんが、2つの方法のバージョンの不一致は混乱を招きます。注として、これをPowershellに戻すためのメソッドのバリエーション(Get-ItemChildやGet-ItemPropertyなど)を実行しましたが、同じ誤ったバージョンの結果が得られます。

理由について何かアイデアはありますか?

4

1 に答える 1

12

問題は、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)}}"
于 2012-06-19T03:23:02.103 に答える