从 powershell 中的本地计算机证书存储中删除证书?

Dom*_*tti 4 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
Run Code Online (Sandbox Code Playgroud)

但它并没有从商店中删除证书或给出任何错误(是的,我正在运行此提升)。

我检查了我的$oldCert变量以查看它是否已填充,它是:

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

Thumbprint                                Subject                                                                                                                                                                       
----------                                -------                                                                                                                                                                       
276B7B87740D5E9595A258060F5CD9CC4190E9E1  CN=test.domain.com, <truncated>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?对此,我真的非常感激。

The*_*le1 8

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

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

$oldCert | Remove-Item
Run Code Online (Sandbox Code Playgroud)

或者

Remove-Item -LiteralPath $oldCert.PSPath
Run Code Online (Sandbox Code Playgroud)