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

如何将Get-ChildItem的FullName属性传入X509Certificate2对象并保留

解决PowerShell中X509Certificate2对象添加证书文件FullName属性的问题

要将证书文件的完整路径(FullName)添加到X509Certificate2对象中,核心是给证书对象手动添加自定义属性——因为X509Certificate2本身不包含文件路径属性。以下是两种可行的实现方式:

方式1:使用计算属性直接在Select中添加

这种方式更简洁,直接在Select-Object中通过计算属性注入文件路径:

$certlisting = Get-ChildItem -Path $certpath1 -Recurse 

$certout = foreach ($cer in $certlisting.FullName) {
    New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2($cer) | 
        Select-Object Issuer, FriendlyName, NotAfter, NotBefore, PublicKey, SerialNumber, SignatureAlgorithm, Subject, Thumbprint, Version,
        @{Name='FullName'; Expression={$cer}} |  # 注入当前证书文件的完整路径
        Sort-Object Issuer, NotAfter -Descending
}

$certout | Export-Csv -Path .\Certificates.csv -NoTypeInformation -Encoding ASCII

方式2:使用Add-Member添加NoteProperty

如果需要后续对属性做更多操作,也可以先创建证书对象,再通过Add-Member添加自定义属性:

$certlisting = Get-ChildItem -Path $certpath1 -Recurse 

$certout = foreach ($cer in $certlisting.FullName) {
    $obj = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2($cer) | 
        Select-Object Issuer, FriendlyName, NotAfter, NotBefore, PublicKey, SerialNumber, SignatureAlgorithm, Subject, Thumbprint, Version |
        Sort-Object Issuer, NotAfter -Descending
    
    # 添加FullName作为NoteProperty,-Force确保属性存在时覆盖(避免报错)
    $obj | Add-Member -MemberType NoteProperty -Name FullName -Value $cer -Force
    $obj
}

$certout | Export-Csv -Path .\Certificates.csv -NoTypeInformation -Encoding ASCII

关键说明

原代码中直接在Select-Object里添加FullName会返回空值,原因是X509Certificate2对象本身不包含文件路径属性,必须手动将遍历到的$cer(即证书文件的完整路径)赋值给自定义属性,才能在最终的输出和CSV文件中保留路径信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:35:18