如何通过PowerShell脚本获取数字签名选项卡时间戳属性符合条件的文件列表
解决PowerShell获取数字签名时间戳的两个需求
我明白你遇到的问题了——VersionInfo确实只能拿到文件详细信息选项卡里的属性,完全碰不到数字签名选项卡的内容。别担心,我们可以用PowerShell自带的Get-AuthenticodeSignature cmdlet来搞定这两个需求,这才是专门处理文件数字签名的工具。
需求1:获取带有时间戳属性的文件列表
这个需求的核心是检查每个文件的数字签名是否包含有效的时间戳,我们可以通过Get-AuthenticodeSignature返回对象的Timestamp属性来判断(有时间戳时该属性会返回一个DateTime对象,无时间戳则为$null)。
示例脚本
# 定义要扫描的文件夹路径(支持多个路径) $targetFolders = "C:\Your\First\Folder", "D:\Your\Second\Folder" # 遍历所有文件,筛选出带时间戳的签名文件 Get-ChildItem -Path $targetFolders -File -Recurse -ErrorAction SilentlyContinue | ForEach-Object { # 获取文件的数字签名信息 $signature = Get-AuthenticodeSignature -FilePath $_.FullName -ErrorAction SilentlyContinue # 筛选条件:签名有效 且 存在时间戳 if ($signature -and $signature.Status -eq "Valid" -and $signature.Timestamp) { # 输出结构化结果 [PSCustomObject]@{ 文件路径 = $_.FullName 时间戳 = $signature.Timestamp 签名者 = $signature.SignerCertificate.Subject 签名状态 = $signature.Status } } } | Export-Csv -Path "带时间戳的签名文件列表.csv" -NoTypeInformation -Encoding UTF8
脚本说明
-ErrorAction SilentlyContinue:跳过无法访问的文件或未签名的文件,避免脚本中断- 如果你只需要扫描特定类型的文件(比如exe、dll),可以在
Get-ChildItem后添加-Include "*.exe", "*.dll" - 最终结果会导出为CSV文件,方便后续查看和分析
需求2:查找时间戳属性为"Not Available"的文件
这里的"Not Available"对应数字签名存在但没有时间戳的情况,我们只需要判断签名状态不是NotSigned且Timestamp属性为$null即可。
示例脚本
# 定义要扫描的文件夹路径 $targetFolders = "C:\Your\Target\Folder1", "E:\Your\Target\Folder2" # 遍历文件,筛选出时间戳不可用的签名文件 Get-ChildItem -Path $targetFolders -File -Recurse -ErrorAction SilentlyContinue | ForEach-Object { $signature = Get-AuthenticodeSignature -FilePath $_.FullName -ErrorAction SilentlyContinue # 筛选条件:已签名 但 无时间戳 if ($signature -and $signature.Status -ne "NotSigned" -and -not $signature.Timestamp) { [PSCustomObject]@{ 文件路径 = $_.FullName 签名状态 = $signature.Status 时间戳状态 = "Not Available" } } } | Export-Csv -Path "时间戳缺失的文件列表.csv" -NoTypeInformation -Encoding UTF8
脚本说明
- 如果需要包含签名无效但同样无时间戳的文件,直接去掉签名状态的限制判断即可
- 脚本会自动忽略未签名的文件,只针对有数字签名但缺少时间戳的文件进行收集
内容的提问来源于stack exchange,提问作者SRP
相关产品推荐
相关产品推荐

