如何无需安装模块验证MSI并获取其签名、厂商及版本信息?
解决方案:无额外模块下处理MSI的签名与版本信息
1. 用Get-AppLockerFileInformation获取MSI版本与厂商信息
Get-AppLockerFileInformation返回的FileInformation对象中,Version属性是System.Version类型,直接调用.ToString()就能将分段版本转成标准字符串格式(如1.0.0.0),完全可行。同时,厂商信息可直接从Publisher属性获取。
示例代码:
$msiPath = "C:\path\to\your\target.msi" $appLockerInfo = Get-AppLockerFileInformation -Path $msiPath | Select-Object -ExpandProperty FileInformation # 转换分段版本为字符串 $msiVersion = $appLockerInfo.Version.ToString() # 获取厂商信息 $msiPublisher = $appLockerInfo.Publisher Write-Host "MSI版本: $msiVersion" Write-Host "厂商信息: $msiPublisher"
如果需要自定义版本格式(比如忽略修订号,只保留主版本.次版本.构建号),可以手动拼接属性:
$customVersion = "$($appLockerInfo.Version.Major).$($appLockerInfo.Version.Minor).$($appLockerInfo.Version.Build)"
2. MSI签名验证仍使用Get-AuthenticodeSignature
无需额外模块,Get-AuthenticodeSignature原生支持MSI文件的签名验证,用法与EXE/DLL一致:
$signature = Get-AuthenticodeSignature -FilePath $msiPath # 检查签名状态 if ($signature.Status -eq "Valid") { Write-Host "MSI签名有效,签名者: $($signature.SignerCertificate.Subject)" } else { Write-Host "MSI签名无效或未签名,状态: $($signature.Status)" }
补充说明
System.Version.ToString()会自动处理所有分段,即使某段为0也会保留(如2.0.0.0),完全满足版本字符串的需求。Get-AppLockerFileInformation是Windows原生cmdlet,无需安装任何模块,适配流水线受限环境。
内容的提问来源于stack exchange,提问作者Bandit
相关产品推荐
相关产品推荐

