找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20913|回复: 6

[问题求助] [已解决]PowerShell如何查询文件的数字签名信息?

[复制链接]
发表于 2019-10-20 14:17:07 | 显示全部楼层 |阅读模式
本帖最后由 czjt1234 于 2019-10-28 10:34 编辑

如何查询文件的数字签名信息?
不要第三方工具
 楼主| 发表于 2019-10-24 10:00:23 | 显示全部楼层
API函数
https://blog.csdn.net/qq_43080331/article/details/83096192

验证文件数字签名是否有效可以使用函数 WinVerifyTrust

取得文件数字签名证书信息需要使用函数 CryptQueryObject。

PS可以调用API吗?
发表于 2019-10-24 15:18:13 | 显示全部楼层
简单点:查看证书是否有效和内容

  1. $file='绝对路径';
  2. $s=Get-AuthenticodeSignature $file;
  3. $s.Status;
  4. $s.SignerCertificate;
复制代码
复杂的或者各种内容,自己弄一下就明白了。

评分

参与人数 1技术 +1 收起 理由
czjt1234 + 1 乐于助人

查看全部评分

 楼主| 发表于 2019-10-25 06:30:56 | 显示全部楼层
本帖最后由 czjt1234 于 2019-10-25 07:25 编辑

Thumbprint                                Subject
----------                                -------
6FFAD4A3B15F6A2C71D43C8E551DCECAB3A5183C  CN=Microsoft Corporation, OU=MOPR, O=Microsoft Corporation, L=Redmond, S=W...

这个显示不全啊,最后的 ... 怎么显示出来
看不到数字签名的日期,主要是想看这个

另外怎么把看到的信息输出到文本?
发表于 2019-10-25 11:19:28 | 显示全部楼层
这里有篇文章,可能是你需要的:
https://blog.csdn.net/sinat_41104353/article/details/82826406

评分

参与人数 1技术 +1 收起 理由
czjt1234 + 1 乐于助人

查看全部评分

发表于 2019-10-25 11:24:54 | 显示全部楼层
  1. [System.Collections.ArrayList]$arr = @('"文件名","证书","序列号","颁发者","使用者","有效期"');

  2. forEach( $file In (dir 'C:\Windows\System32\drivers\*.sys') ){
  3.     $sig = Get-AuthenticodeSignature $file.FullName;
  4.     if( $sig.Status -eq 'Valid' ){
  5.         $str = '"' + $file.Name + '",';                                                 #文件名
  6.         $str += '"' + $sig.SignerCertificate.Thumbprint + '",';                         #证书
  7.         $str += '"' + $sig.SignerCertificate.SerialNumber + '",';                       #序列号
  8.         $str += '"' + $sig.SignerCertificate.IssuerName.Name.split('=,')[1] + '",';     #颁发者
  9.         $str += '"' + $sig.SignerCertificate.SubjectName.Name.split('=,')[1] + '",';    #使用者
  10.         $str += '"' + $sig.SignerCertificate.NotBefore.ToString('yyyy/MM/dd HH:mm:ss'); #有效期
  11.         $str += ' 至 ';
  12.         $str += $sig.SignerCertificate.NotAfter.ToString('yyyy/MM/dd HH:mm:ss') + '"';
  13.         $null = $arr.Add($str);
  14.     }
  15. }
  16. sc 'D:\result.csv' $arr
复制代码

评分

参与人数 1技术 +1 收起 理由
czjt1234 + 1 乐于助人

查看全部评分

 楼主| 发表于 2019-10-25 14:14:30 | 显示全部楼层
回复 6# WHY


非常感谢
不过我看到的时间戳,和有效期的起止日期都不一致
不知道有没有关于时间戳的属性

一批文件,我想按时间戳的日期来运行,避免出错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:51 , Processed in 0.021351 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表