在PowerShell中获取文件版本

如何从PowerShell中的.dll.exe文件获取版本信息?

我对File Version特别感兴趣,但其他版本信息(即CompanyLanguageProduct Name等)也会有所帮助。


由于PowerShell可以调用.NET类,因此可以执行以下操作:

[System.Diagnostics.FileVersionInfo]::GetVersionInfo("somefilepath").FileVersion

或者如文件列表中所述:

get-childitem * -include *.dll,*.exe | foreach-object { "{0}`t{1}" -f $_.Name, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }

或者更好的脚本:http://jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!125.entry


现在,您可以从Get-Item或Get-ChildItem中获取FileVersionInfo,但它将显示出货产品中的原始FileVersion,而不是更新后的版本。 例如:

(Get-Item C:WindowsSystem32Lsasrv.dll).VersionInfo.FileVersion

有趣的是,你可以通过使用这个获得更新(修补)的ProductVersion:

(Get-Command C:WindowsSystem32Lsasrv.dll).Version

请注意,对于像lsasrv这样的文件(由于2014年11月的SSL / TLS / RDS中的安全问题而被替换),这两个命令报告的版本不同, 第二个版本是正确的版本。

然而,虽然LSASrv中它是正确的,但是ProductVersion和FileVersion可能不同(事实上这很常见)。 所以获得更新的Fileversion的唯一方法是自己构建它,如下所示:

Get-Item C:WindowsSystem32Lsasrv.dll | ft FileName, File*Part

或者,像这样:

Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersion -MemberType ScriptProperty -Value {
   [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
      [Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".") 
   }
}

现在,每当您执行Get-ChildItemGet-Item您都将拥有一个FileVersion属性,该属性显示已更新的FileVersion ...


'dir'是Get-ChildItem的别名,它将在您将VersionInfo作为属性的文件系统调用时返回System.IO.FileInfo类。 所以......

要获取单个文件的版本信息,请执行以下操作:

PS C:Windows> (dir .write.exe).VersionInfo | fl


OriginalFilename : write
FileDescription  : Windows Write
ProductName      : Microsoft® Windows® Operating System
Comments         :
CompanyName      : Microsoft Corporation
FileName         : C:Windowswrite.exe
FileVersion      : 6.1.7600.16385 (win7_rtm.090713-1255)
ProductVersion   : 6.1.7600.16385
IsDebug          : False
IsPatched        : False
IsPreRelease     : False
IsPrivateBuild   : False
IsSpecialBuild   : False
Language         : English (United States)
LegalCopyright   : © Microsoft Corporation. All rights reserved.
LegalTrademarks  :
PrivateBuild     :
SpecialBuild     :

对于多个文件:

PS C:Windows> dir *.exe | %{ $_.VersionInfo }

ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.7600.16385   6.1.7600.1638... C:Windowsbfsvc.exe
6.1.7600.16385   6.1.7600.1638... C:Windowsexplorer.exe
6.1.7600.16385   6.1.7600.1638... C:Windowsfveupdate.exe
6.1.7600.16385   6.1.7600.1638... C:WindowsHelpPane.exe
6.1.7600.16385   6.1.7600.1638... C:Windowshh.exe
6.1.7600.16385   6.1.7600.1638... C:Windowsnotepad.exe
6.1.7600.16385   6.1.7600.1638... C:Windowsregedit.exe
6.1.7600.16385   6.1.7600.1638... C:Windowssplwow64.exe
1,7,0,0          1,7,0,0          C:Windowstwunk_16.exe
1,7,1,0          1,7,1,0          C:Windowstwunk_32.exe
6.1.7600.16385   6.1.7600.1638... C:Windowswinhlp32.exe
6.1.7600.16385   6.1.7600.1638... C:Windowswrite.exe
链接地址: http://www.djcxy.com/p/4937.html

上一篇: Get file version in PowerShell

下一篇: How to get video tags from youtube video?