jsc*_*her 5 powershell wmi-query versioninfo wmic
我试图理解为什么Powershell会获得一个DLL文件的不同版本号,而不是Windows资源管理器中的文件属性页和WMI查询显示的版本号.(如果这不能正确地作为编码问题,我会提前道歉.)
场景:
运行以下powershell命令:
(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo.ProductVersion
Run Code Online (Sandbox Code Playgroud)
这将返回以下内容:
6.1.7600.16385
但是,此版本号不正确.从Windows资源管理器中检查版本信息时,您会看到以下版本(抱歉,我尝试发布它的一个小屏幕截图,但我没有足够的代表;我是新来的):
6.1.7601.17767
此外,WMIC查询显示与Windows资源管理器相同的结果:
WMIC path CIM_DataFile WHERE (name="c:\\windows\\system32\\rdpcorekmts.dll") get Version
Run Code Online (Sandbox Code Playgroud)
WMIC结果:
版
6.1.7601.17767
我真的不明白为什么他们会有所不同.我真的想用Powershell返回这个值,但是现在我不确定我是否只是忽略了某些东西,或者我遇到了某种奇怪的错误,但这两种方法之间的版本不匹配令人困惑.作为一个注释,我在方法中运行变体以在Powershell中重新获得它(例如Get-ItemChild和Get-ItemProperty),并且得到相同的错误版本结果.
有什么想法吗?
JPB*_*anc 10
问题是你正在使用ProductVersion似乎在某处硬编码的属性,IE和WMI只是构建产品版本:
ProductMajorPart : 6
ProductMinorPart : 1
ProductBuildPart : 7601
ProductPrivatePart : 17767
Run Code Online (Sandbox Code Playgroud)
同样适用FileVersion于:FileMajorPart,FileMinorPart,FileBuildPart,FilePrivatePart
试一试 :
(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo | fl *
Run Code Online (Sandbox Code Playgroud)
你可以测试:
(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo | % {("{0}.{1}.{2}.{3}" -f $_.ProductMajorPart,$_.ProductMinorPart,$_.ProductBuildPart,$_.ProductPrivatePart)}
Run Code Online (Sandbox Code Playgroud)
从CMD.EXE您可以尝试:
C:\>powershell -command "&{(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo | % {write-host ('{0}.{1}.{2}.{3}' -f $_.ProductMajorPart,$_.ProductMinorPart,$_.ProductBuildPart,$_.ProductPrivatePart)}}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11499 次 |
| 最近记录: |