Powershell将证书传输到新的PC – 如何确定证书是否可导出

我正在使用以下PowerShell来获取证书列表,包括任何已存档的证书,以便我可以轻松地将它们传输到新的PC

$store=new-object System.Security.Cryptography.X509Certificates.X509Store("My","CurrentUser") $store.open("ReadOnly,IncludeArchived") $privateCerts = $store.Certificates | Where-Object { $_.hasPrivateKey } 

但是,当我尝试使用例如将它们导出到pfx文件

 $privateCerts| Foreach-Object { [system.IO.file]::WriteAllBytes("$($_.thumbprint)$($_.Subject).pfx", ($_.Export('PFX', 'password')) ) } 

它引发任何不可导出的exception。 现在我知道我不能导出这些,但是我想跳过它们而不会让脚本抛出错误。 我可以通过捕获exception来解决它,但有没有办法确定证书是否可导出。

我find了引用x509keystorageflags有一个“可导出”位,我可以检查,但我不能解决如何获得使用PowerShell的证书信息。

Exportable位在私钥容器本身上设置,而不是直接在证书上设置:

 $privateCerts = $store.Certificates | Where-Object {$_.HasPrivateKey} $Exportables = $privateCerts | Where-Object {$_.PrivateKey.CspKeyContainerInfo.Exportable} 

我不认为这将适用于其他types的基于RSA的密钥对