特定应用程序部署的预先需求是在安装之前,我们需要在PC的Windows Trusted Publishers证书存储区中安装特定的PKI证书。
有什么办法可以检测一个特定的证书是否已经安装? 理想情况下,使用单行命令或短脚本(可用于pre-req检测,或在SCCM 2012中作为依赖项检查)?
似乎有很多命令和脚本列出所有已安装的证书,或所有已安装的证书即将过期,但没有看到可以识别是否安装了一个特定的证书。
这可以通过一个PowerShell单线程,你只需要一个简单的方法来识别该证书(我正在使用证书的ThumbPrint)。
如果你已经有一台你知道肯定已经安装了证书的机器(交互检查的最简单方法就是使用certmgr.msc ),那么你可以使用该机器来查找证书的指纹。
以下PowerShell命令将列出在本地计算机上下文中安装在Trusted Publisher存储中的所有证书:
Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher
显然,上面的path可以修改,列出其他的证书存储,或者你可以查看(一长串)所有本地安装的证书使用:
Get-ChildItem -Path Cert: -Recurse
第一个命令应该给你一个这样的输出:
PS C:\> Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\TrustedPublisher Thumbprint Subject ---------- ------- 83EDC96EC3D55125EFFC77BC815F9133E268D5EB CN="User, Test", OU=Testing Resources... 4DFF713712084D43DE6879C689F9A143C4A793BF CN=Server One Self-signed
一旦你find你正在寻找的证书的指纹,你可以用它来过滤结果,如下所示:
Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher | Where-Object {$_.Thumbprint -eq "83EDC96EC3D55125EFFC77BC815F9133E268D5EB"}
这应该返回证书的详细信息,如果它没有安装。 在其他用途中,这个Powershell单线程可用作SCCM 2012应用程序中的自定义脚本检测方法。
(使用的资源: 使用PowerShell查找即将过期的证书 | PowerTip:使用PowerShell发现证书指纹 | 使用Where-Object Cmdlet )