Не каждый знает, что центр сертификации Windows поддерживает не одну, а несколько таблиц:
Мы уже знаем, как обращаться к таблице запросов. По схожему принципу можно обращаться и к другим таблицам. Для переключения между ними используется метод SetTable интерфейса ICertView2. По умолчанию всегда используется таблица CVRC_TABLE_REQCERT. Вот какие кодовые номера у таблиц:
Метод SetTable нужно вызывать сразу после вызова метода OpenConnection. Таблица CRL'ов хранит историю всех CRL'ов (вместе с самими CRL'ами), которые были сгенерированы сервером CA, а так же прочую полезную информацию.
Вот как смотрится схема этой таблицы:
$CA = "dc1\Contoso CA" $CaView = New-Object -ComObject CertificateAuthority.View # открываем подключение к CA $CaView.OpenConnection($CA) # указываем необходимую таблицу $CaView.SetTable(0x5000) # говорим, что мы хотим посмотреть схему $Columns = $CaView.EnumCertViewColumn(0) # начинаем итерацию по столбцам БД [void]$Columns.Next() do { # создаём временный объект, чтобы получить красивый вывод и наполняем его данными $Column = "" | Select Name, DisplayName, Type, MaxLength $Column.Name = $Columns.GetName() $Column.DisplayName = $Columns.GetDisplayName() $Column.Type = switch ($Columns.GetType()) { 1 {"Long"} 2 {"DateTime"} 3 {"Binary"} 4 {"String"} } [string]$Column.MaxLength = $Columns.GetMaxLength() if ($Columns.IsIndexed() -eq 1) {$Column.MaxLength += ", Indexed"} $Column } until ($Columns.Next() -eq -1) # закрываем подключение к БД $Columns.Reset()
Её вид:
Name DisplayName Type MaxLength ---- ----------- ---- --------- CRLRowId CRL Row ID Long 4, Indexed CRLNumber CRL Number Long 4, Indexed CRLMinBase CRL Minimum Base Number Long 4 CRLNameId CRL Name ID Long 4 CRLCount CRL Count Long 4 CRLThisUpdate CRL This Update DateTime 8 CRLNextUpdate CRL Next Update DateTime 8, Indexed CRLThisPublish CRL This Publish DateTime 8 CRLNextPublish CRL Next Publish DateTime 8, Indexed CRLEffective CRL Effective DateTime 8 CRLPropagationComplete CRL Propagation Complete DateTime 8, Indexed CRLLastPublished CRL Last Published DateTime 8, Indexed CRLPublishAttempts CRL Publish Attempts Long 4, Indexed CRLPublishFlags CRL Publish Flags Long 4 CRLPublishStatusCode CRL Publish Status Code Long 4, Indexed CRLPublishError CRL Publish Error Information String 8192 CRLRawCRL CRL Raw CRL Binary 536870912
Вот пример вывода:
$CA = "dc1\Contoso CA" $CaView = New-Object -ComObject CertificateAuthority.View $CaView.OpenConnection($CA) $CaView.SetTable(0x5000) $ColumnCount = $CaView.GetColumnCount(0) $CaView.SetResultColumnCount($ColumnCount) 0..($ColumnCount - 1) | %{$CAView.SetResultColumn($_)} $Row = $CaView.OpenView() [void]$Row.Next() while ($Row.Next() -ne -1) { $cert = New-Object psobject $Column = $Row.EnumCertViewColumn() while ($Column.Next() -ne -1) { $current = $Column.GetName() $Cert | Add-Member -MemberType NoteProperty $($Column.GetDisplayName()) -Value $($Column.GetValue(1)) -Force } $Cert $Column.Reset() } $Row.Reset()
CRL Row ID : 409 CRL Number : 347 CRL Minimum Base Number : 340 CRL Name ID : 1 CRL Count : 0 CRL This Update : 2010.02.25. 17:55:51 CRL Next Update : 2010.02.26. 19:15:51 CRL This Publish : 2010.02.25. 18:05:51 CRL Next Publish : 2010.02.26. 18:05:51 CRL Effective : 2010.02.18. 17:55:51 CRL Propagation Complete : 2010.02.25. 19:05:51 CRL Last Published : 2010.02.25. 18:05:51 CRL Publish Attempts : 1 CRL Publish Flags : 6 CRL Publish Status Code : 0 CRL Publish Error Information : - CRL Raw CRL : MIICzDCCAbQCAQEwDQYJKoZIhvcNAQEFBQAwQzETMBEGCgmSJomT8ixkARkWA2Nv bTEXMBUGCgmSJomT8ixkARkWB2NvbnRvc28xEzARBgNVBAMTCkNvbnRvc28gQ0EX DTEwMDIyNTE3NTU1MVoXDTEwMDIyNjE5MTU1MVqgggE7MIIBNzAfBgNVHSMEGDAW gBQSyac4taTAA9cqtmWlsPEzGBKsPzAQBgkrBgEEAYI3FQEEAwIBATALBgNVHRQE BAICAVswHAYJKwYBBAGCNxUEBA8XDTEwMDIyNjE4MDU1MVowDgYDVR0bAQH/BAQC AgFUMIHGBgkrBgEEAYI3FQ4EgbgwgbUwgbKgga+ggayGgalsZGFwOi8vL0NOPUNv bnRvc28lMjBDQSxDTj1EQzEsQ049Q0RQLENOPVB1YmxpYyUyMEtleSUyMFNlcnZp Y2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9Y29udG9zbyxEQz1j b20/ZGVsdGFSZXZvY2F0aW9uTGlzdD9iYXNlP29iamVjdENsYXNzPWNSTERpc3Ry aWJ1dGlvblBvaW50MA0GCSqGSIb3DQEBBQUAA4IBAQB3DuZRToyK/OkrnCQQUl1P qgv/V9nPhAR6LF/b25Tq7fhKZniAk/cPgj2L3IMsLx2lmrI7GEEDt4UDcuc3EPtF f7gixrN3K+eSE/Er0NxBdJFUhHK9e/CVXqJFV2pGSa77mvcI75l2h5mlUGDZzGOl <...> <...>
Что касается остальных двух таблиц, то они, как я уже говорил, работают по тому же принципу и вы так же можете накладывать фильтры вывода методом SetRestriction. Они содержат ту же информацию, что вы видите в оснастке CertSrv.msc, когда выделяете запрос, нажимаете Action –> All Tasks –> View Attributes/Extensions.
На этом я завершаю цикл статей по работе с базой данных центров сертификации Windows с помощью Windows PowerShell.
Comments: