我正在尝试检查,然后删除证书(如果该证书存在于用户的本地计算机存储中)。我已经尝试过了:
$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>
有人知道如何做到这一点吗?我真的很感激。
答案 0 :(得分:2)
您遇到的问题是X509Certificate2
驱动器中Cert:\
对象的自动字符串转换。当您将其作为-Path some\path\$myobj
附加到路径时,它隐式地在对象上调用ToString
。您可以通过在控制台上执行"some\path\$myobj"
而无需任何其他代码,或者只需调用$myobj.ToString()
即可观察到这一点。
由于Remove-Item
通过属性名称获取管道输入,因此当您通过管道传递对象时,它将自动从您的对象中拉出路径,因此您可以像这样简单地解决问题:
$oldCert | Remove-Item
或
Remove-Item -LiteralPath $oldCert.PSPath