You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell提取证书颁发者与主体通用名的问题

解决PowerShell提取证书颁发者/主体通用名时的逗号问题

你的代码失效的原因是:直接用逗号分割证书的Issuer/Subject字符串,会把通用名(CN)里转义过的逗号(比如MyCompany\, Inc.中的\,)当成分割符,导致CN值被错误拆分。

正确的单行命令

Get-AuthenticodeSignature .\test.exe | ForEach-Object { $cert=$_.SignerCertificate; $issuerDN=New-Object System.Security.Cryptography.X509Certificates.X500DistinguishedName $cert.Issuer; $subjectDN=New-Object System.Security.Cryptography.X509Certificates.X500DistinguishedName $cert.Subject; ($cert.Thumbprint, ($issuerDN.Name -split '=',2)[1] -replace '\\,',',', ($subjectDN.Name -split '=',2)[1] -replace '\\,',',', $cert.NotAfter) -join ',' }

关键处理逻辑

  • 用X500DistinguishedName类解析证书的颁发者/主体DN,这是系统提供的标准解析方式,能正确识别转义字符
  • 用-split '=',2只拆分CN属性名和值之间的第一个等号,确保完整提取包含逗号的CN值
  • 用-replace '\\,', ','把DN中转义的逗号恢复成普通逗号,还原真实的通用名

拆分版(便于理解)

如果觉得单行太紧凑,也可以写成多行版看清楚逻辑:

Get-AuthenticodeSignature .\test.exe | ForEach-Object {
    # 提取证书对象
    $cert = $_.SignerCertificate
    # 解析颁发者DN
    $issuerDN = New-Object System.Security.Cryptography.X509Certificates.X500DistinguishedName $cert.Issuer
    # 提取颁发者CN并还原转义逗号
    $issuerCN = ($issuerDN.Name -split '=',2)[1] -replace '\\,', ','
    # 解析主体DN
    $subjectDN = New-Object System.Security.Cryptography.X509Certificates.X500DistinguishedName $cert.Subject
    # 提取主体CN并还原转义逗号
    $subjectCN = ($subjectDN.Name -split '=',2)[1] -replace '\\,', ','
    # 拼接输出内容
    ($cert.Thumbprint, $issuerCN, $subjectCN, $cert.NotAfter) -join ','
}

内容的提问来源于stack exchange,提问作者fhcat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:01:09