如何在PowerShell中获取文件版本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

如何从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 }
用户回答回答于

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

(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion

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

(Get-Command C:\Windows\System32\Lsasrv.dll).Version

请注意,对于像lsasrv这样的文件,这两个命令报告的版本不同,第二个版本是正确的版本。

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

Get-Item C:\Windows\System32\Lsasrv.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 的属性...

扫码关注云+社区