Предварительным требованием для развертывания конкретного приложения является то, что перед установкой нам понадобится определенный сертификат PKI, установленный в хранилище сертификатов Windows Trusted Publishers на ПК.
Есть ли способ определить, установлен ли уже конкретный сертификат? В идеале использовать однострочную команду или короткий сценарий (который можно использовать для обнаружения предварительных запросов или в качестве проверки зависимостей в SCCM 2012)?
Кажется, существует множество команд и сценариев для перечисления всех установленных сертификатов или всех установленных сертификатов, срок действия которых скоро истекает, но я ничего не вижу для определения того, установлен ли один конкретный сертификат.
Это возможно с помощью однострочника PowerShell, вам просто нужен простой способ идентифицировать этот сертификат (я использую ThumbPrint сертификата).
Если у вас уже есть известный компьютер, на котором, как вы знаете, определенно установлен сертификат (самый простой способ интерактивной проверки - просто использовать certmgr.msc
), то вы можете использовать этот компьютер, чтобы найти отпечаток сертификата.
Следующая команда PowerShell выведет список всех сертификатов, установленных в хранилище доверенных издателей, в контексте локального компьютера:
Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher
Очевидно, что приведенный выше путь можно изменить, чтобы отобразить другие хранилища сертификатов, или вы можете просмотреть (длинный список) все локально установленные сертификаты, используя:
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
Как только вы нашли отпечаток сертификата, который ищете, вы можете использовать его для фильтрации результатов следующим образом:
Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher | Where-Object {$_.Thumbprint -eq "83EDC96EC3D55125EFFC77BC815F9133E268D5EB"}
Это должно вернуть сведения о сертификате, если он установлен, и ничего, если это не так. Помимо прочего, этот однострочник Powershell можно использовать в качестве метода обнаружения настраиваемых сценариев в приложении SCCM 2012.
(Использованные ресурсы: Используйте PowerShell для поиска сертификатов, срок действия которых истекает | PowerTip: использование PowerShell для обнаружения отпечатков сертификатов | Использование командлета Where-Object)