Формат Эмитента Вывод - PullRequest
0 голосов
/ 23 мая 2019

В следующем коде, как вы можете видеть, я хочу собрать информацию о SSL-сертификатах, но у меня есть две проблемы с форматом, с которым сталкиваются поля Issuer и Usages. В первом поле Issuer fir пример показывает мне результаты, подобные этим:

O = Установщик VMware

CN = корневой центр сертификации Microsoft Development 2014, O = корпорация Microsoft, L = Редмонд, S = Вашингтон, C = США

что я хочу получить в результате

Установщик VMware

Корневой центр сертификации Microsoft Development 2014

Для второго поля Usages у меня есть, например, следующий вывод

DataEncipherment, KeyEncipherment, DigitalSignature

Значение FriendlyName

----- ------------

1.3.6.1.5.5.7.3.1 Аутентификация сервера

То, что я хочу показать:

DataEncipherment, KeyEncipherment, DigitalSignature, Аутентификация сервера

Это мой сценарий:

  $CertPath = "Cert:\LocalMachine\"
  $CertsDetail = Get-ChildItem -Path $CertPath -Recurse |`
        Where-Object { $_.PsIsContainer -ne $true } |`
        ForEach-Object {
              $Usages = foreach ($key in $_.Extensions) {
                    if ($key.KeyUsages) {
                          $key.KeyUsages
                    }
              }         
              [PSCustomObject]@{
                    Issuer  = $_.Issuer
                    Subject = $_.Subject
                    Usages  = ($Usages | Out-String).Trim()
                    #Usages = $Usages -join ';'
              }
        }
  $CertsDetail
  $CertsDetail | Where-Object { $_.Usages -ne "" } | Export-Csv -NoTypeInformation -Path 'C:\SECnology\Data\Utilities\Certificate_State.csv'

1 Ответ

0 голосов
/ 23 мая 2019

Возможно, сделав, как показано ниже, вы получите формат, который вам нужен:

$CertPath = 'Cert:\LocalMachine\'             #'# dummy comment to correct code-highlighting in SO
$CertsDetail = Get-ChildItem -Path $CertPath -Recurse | Where-Object { !$_.PsIsContainer } | ForEach-Object {
    $Usages = ($_.Extensions | Where-Object {$_.KeyUsages}).KeyUsages
    if ($Usages) {
        # get at most two parts out of the $_.Issuer string
        $issuer = '{0}, {1}' -f ([regex] 'O=([^,]+)').Match($_.Issuer).Groups[1].Value, 
                                ([regex] 'CN=([^,]+)').Match($_.Issuer).Groups[1].Value
        [PSCustomObject]@{
            Issuer  = $issuer.Trim(", ")
            Subject = $_.Subject
            Usages  = $Usages.ToString() -replace ',', ';'
        }
    }
}

$CertsDetail | Format-List
$CertsDetail | Export-Csv -NoTypeInformation -Path 'C:\SECnology\Data\Utilities\Certificate_State.csv'

Попытка сделать это на моем (Windows 7) компьютере дает мне вывод, как

Issuer  : Microsoft Root Authority
Subject : CN=Microsoft Enforced Licensing Intermediate PCA, OU=Copyright (c) 1999 Microsoft Corp., O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Usages  : CrlSign; KeyCertSign; DigitalSignature

Issuer  : The USERTRUST Network, UTN-USERFirst-Hardware
Subject : CN=www.google.com, OU=PlatinumSSL, OU=Hosted by GTI Group Corporation, OU=Tech Dept., O=Google Ltd., STREET=Sea Village 10, L=English, S=Florida, PostalCode=38477, C=US
Usages  : KeyEncipherment; DigitalSignature
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...