对于大多数 Windows 可执行文件(DLL、EXE……),可以使用“属性”中的“详细信息”选项卡查看版本和其他详细信息(Alt+ Enter)。
我想知道:是否还有命令行方式可以做到这一点?我对产品版本特别感兴趣,但其他东西也可能有用。
需要以下属性(按优先顺序排列):
- 接受 exe/dll 路径作为参数
- 输出到标准输出(这样你就可以通过管道处理其余部分
|
) - 在所有受支持的 Windows (XP+) 中默认可用
- 在 Windows Vista+ 中默认可用
- 在 Windows XP 中默认可用
- 可用于商业环境
- 免费许可证(类似 GPL)
- 可移植(即独立 exe,可能附带 DLL)
答案1
在 powershell 中,get-command "full-path-to-executable" | format-list
就可以解决问题。Powershell 是 Vista 及更高版本的 Windows 的新命令行,可以在 XP 中安装。
答案2
您可以使用sigcheck.exe
便携式工具的一部分Sysinternals 套件例如
$ sigcheck.exe some_app.exe
Sigcheck v2.51 - File version and signature viewer
Copyright (C) 2004-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
C:/Program Files (x86)/Foo App\some_app.exe:
Verified: Signed
Signing date: 14:48 23/12/2015
Publisher: X
Company: X
Description: X
Product: Some App
Prod version: 5.0.0.1241
File version: 5.0.0.1241
MachineType: 32-bit
对于较旧版本的 Windows,例如 XP/2k/2003(在新版本中仍然可以使用),使用filever.exe
工具(检查直接链接在信息中心)获取有关文件的特定信息,例如:
- 文件运行的平台
- 文件的版本
- 文件的属性
- 文件类型
- 文件的语言
- 文件是运输类型还是调试类型
- 文件大小
- 文件创建日期
- 文件路径
其他需要考虑的事项:
Microsoft COFF 二进制文件转储器转储文件 (转储文件.EXE)
显示有关通用对象文件格式 (COFF) 二进制文件的信息。您可以使用 DUMPBIN 检查 COFF 对象文件、COFF 对象的标准库、可执行文件和动态链接库 (DLL)。
binwalk
- 在指定文件中搜索各种 CPU 架构通用的可执行操作码。易于使用的工具,用于分析、逆向工程和从二进制文件中提取有趣的文件/数据。
更多命令请参见:
答案3
答案4
当我最初研究这个问题区域时,我发现使用简单的命令,如(Get-Item -Path "C:\path\to\file.exe").VersionInfo.ProductVersion
- 就像这个问题— 无法在所有可执行文件中可靠地工作(返回值为空)。我还注意到 Explorer做可靠地显示给定可执行文件的属性表中的值,因此我决定构建一个 Powershell 函数来模仿 Explorer(大概)检索属性的操作。
这是一个 Powershell 函数,用于检索所有扩展属性,包括产品版本。
function Get-AllExtendedProperties {
param (
[string]$FilePath
)
If (-not $FilePath) {
Throw "Error: missing `$FilePath parameter"
}
$file = Get-Item $FilePath
If ($file -and $file.Exists) {
$parentFolder = Split-Path $file.FullName -Parent
$shell = New-Object -ComObject Shell.Application
$folder = $shell.Namespace($parentFolder)
$fileItem = $folder.ParseName($file.Name)
# Get all extended properties
$extendedProperties = @{}
For ($i = 0; $i -lt 300; $i++) {
$propertyValue = $folder.GetDetailsOf($fileItem, $i)
if ($propertyValue) {
$propertyName = $folder.GetDetailsOf($folder.Items, $i)
$extendedProperties[$propertyName] = $propertyValue
}
}
# Sort the hashtable by property name
$sortedExtendedProperties = $extendedProperties.GetEnumerator() | Sort-Object Name | ForEach-Object { $_.Key = $_.Key.Trim(); $_ }
Write-Output $sortedExtendedProperties
} Else {
Throw "Error: missing file"
}
}
用法
使用此函数的最简单方法是将其复制/粘贴到 Powershell 窗口中并按Return ↵。然后您可以像这样使用它:
Get-AllExtendedProperties -FilePath "C:\path\to\file.exe"
如果要获取特定属性的值(例如产品版本),请按如下方式使用:
Get-AllExtendedProperties -FilePath "C:\path\to\file.exe" | Where-Object {$_.Name -eq 'Product Version'} | Select-Object -ExpandProperty Value