如何使用 PowerShell 获取 Windows 证书详细信息?

powershellmicrosoft technologiessoftware & coding

我们知道 Windows 证书存储在证书存储区中,但有时通过证书名称查找证书或获取特定证书详细信息可能比较麻烦。

您可以使用 MMC 控制台或使用 CertMgr.msc 命令访问证书存储区。证书存储区中存储了当前用户、服务帐户和本地计算机的证书。要使用 PowerShell 访问证书存储区,您需要访问 PSDrive,证书存储在名为 Cert 的驱动器中,如下所示。

PS C:\> Get-PSDrive cert | ft -AutoSize
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
Cert Certificate \

假设我们要检索存储在本地计算机帐户根目录中的证书的详细信息,那么我们可以使用以下命令。

示例

Get-ChildItem Cert:\LocalMachine\Root\

输出

PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint                               Subject
----------                               -------
CDD4EEAE6000AC7F40C3802C171E30148030C072 CN=Microsoft Root Certificate Authority
BE36A4562FB2EE05DBB3D32323ADF445084ED656 CN=Thawte Timestamping CA, OU=Thawte Ce
A43489159A520F0D93D032CCAF37E7FE20A8B419 CN=Microsoft Root Authority, OU=Microso
92B46C76E13054E104F230517E6E504D43AB10B5 CN=Symantec Enterprise Mobile Root for
8F43288AD272F3103B6FB1428485EA3014C0BCFE CN=Microsoft Root Certificate Authority
7F88CD7223F3C813818C994614A89C99FA3B5247 CN=Microsoft Authenticode(tm) Root Auth

或者您也可以使用以下命令:

Get-Item Cert:\LocalMachine\Root\* | ft -AutoSize

以下命令将获取所有 Microsoft 证书。

Get-ChildItem Cert:\LocalMachine\Root\ | where{$_.Subject -like "*Microsoft*"}

要查找特定证书,您需要知道证书的友好名称。例如,要从根证书存储中查找 “DigiCert” 证书,

示例

Get-ChildItem Cert:\LocalMachine\Root\ | where{$_.FriendlyName -eq 'DigiCert'}

输出

Thumbprint                                Subject
----------                                -------
A8985D3A65E5E5C4B2D7D66D40C6DD2FB19C5436  CN=DigiCert Global Root CA, OU=www.digicert.com,
0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43  CN=DigiCert Assured ID Root CA, OU=www.digicert.com

要直接从本地计算机、当前用户或根存储中搜索,请使用-Recurse参数。

Get-ChildItem Cert:\LocalMachine\ -Recurse | where{$_.FriendlyName -eq 'DigiCert'}

获取指纹或友好名称后,您可以使用 fl * 管道获取证书的完整详细信息。

Get-ChildItem Cert:\LocalMachine\root | where{$_.FriendlyName -eq 'DigiCert'} | fl *

对于远程服务器,我们可以使用Invoke-Command,以下示例将从远程服务器获取证书。

示例

Invoke-Command -ComputerName Test1Comp, Test2Comp -Scriptblock{
   Get-ChildItem Cert:\LocalMachine\root | where{$_.FriendlyName -eq 'DigiCert'}
}

相关文章