如何将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
相关产品推荐
相关产品推荐

