要从Powershell中的本地计算机证书存储中删除证书吗?

时间:2018-12-19 20:13:57

标签: powershell

我正在尝试检查,然后删除证书(如果该证书存在于用户的本地计算机存储中)。我已经尝试过了:

$certCN = 'test.domain.com'
Set-Location Cert:\LocalMachine\My
$oldCert = Get-ChildItem -Recurse | 
Where-Object { $_.subject -like "CN=$oldCert*" }
Remove-Item Cert:\LocalMachine\My\$oldCert -Force

但是它并没有从存储中删除证书,也没有给出任何错误(是的,我正在运行提升权限)。

我检查了$oldCert变量,看是否填充了它,并且是:

PS Cert:\LocalMachine\My> $oldcert
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My

Thumbprint                                Subject                                                                                                                                                                       
----------                                -------                                                                                                                                                                       
276B7B87740D5E9595A258060F5CD9CC4190E9E1  CN=test.domain.com, <truncated>

有人知道如何做到这一点吗?我真的很感激。

1 个答案:

答案 0 :(得分:2)

您遇到的问题是X509Certificate2驱动器中Cert:\对象的自动字符串转换。当您将其作为-Path some\path\$myobj附加到路径时,它隐式地在对象上调用ToString。您可以通过在控制台上执行"some\path\$myobj"而无需任何其他代码,或者只需调用$myobj.ToString()即可观察到这一点。

由于Remove-Item通过属性名称获取管道输入,因此当您通过管道传递对象时,它将自动从您的对象中拉出路径,因此您可以像这样简单地解决问题:

$oldCert | Remove-Item

Remove-Item -LiteralPath $oldCert.PSPath