Имя: Пароль:
1C
 
Удаление сертификатов из личного хранилища пользователя скриптом
0 YFedor
 
06.07.26
11:56
Хочу скриптом удалить их личного хранилища пользователя просроченные сертификаты.
Без использования powershell.

Подскажите как сделать.

Перебрал уже разные объекты коллекций сертификатов - все не поддерживают метод удаления ...


' Текущее время и граница поиска
Today = Date

' Открываем хранилище (пример: текущее пользовательское хранилище «MY»)
Set Store = CreateObject("CAPICOM.Store")
Store.Open

Set Certificates = Store.Certificates
Set CertExpired    = CreateObject("Scripting.Dictionary")

' Перебираем все сертификаты в хранилище
For Each Cert In Certificates

    ' Проверяем, не истёк ли сертификат
    If Cert.ValidToDate < Today Then

        ' Сертификат истек - нужно удалить

    WScript.Echo Cert.SubjectName & "  " & Cert.ValidToDate
    
    certExpired.Add Cert, Cert.ValidToDate


    End If
Next


' Перебираем все сертификаты в коллекции на удаление
'For Each Cert In CertExpired

    Certificates.Remove(Cert)

'Next



' Закрываем хранилище
Set Store = Nothing



На строке "Certificates.Remove(Cert)" - ошибка: объект не поддерживает указанный метод
1 ads55
 
06.07.26
12:01
2 YFedor
 
06.07.26
12:59
(1) Так оно и есть - не работает же
3 shuhard
 
06.07.26
13:07
(2) токены на ИИ закончились ?
4 YFedor
 
06.07.26
13:23
(3) Так их и не было вовсе
5 YFedor
 
06.07.26
16:03
Пока получилось так:

Set WSHShell     = CreateObject("WScript.Shell")
Set Store = CreateObject("CAPICOM.Store")

'Загрузим все сертификаты с диска
cmdLine_    = """c:\Program Files\Crypto Pro\CSP\csptest.exe"" -absorb -certs -silent"
WSHShell.Run cmdLine_, 2, true

' Текущее время и граница поиска
Today = Date

' Открываем хранилище (пример: текущее пользовательское хранилище «MY»)
Store.Open 2, "MY", 1

Set Certificates = Store.Certificates
Set CertExpired    = CreateObject("Scripting.Dictionary")

' Перебираем все сертификаты в хранилище
For Each Cert In Certificates

    ' Проверяем, не истёк ли сертификат
    If Cert.ValidToDate < Today Then

        ' Сертификат истек - нужно удалить
    certExpired.Add Cert.Thumbprint, Cert.Thumbprint

    End If
Next

' Перебираем все сертификаты в коллекции на удаление
For Each Cert In CertExpired

    cmdLine_    = """c:\Program Files\Crypto Pro\CSP\certmgr.exe"" -delete -thumbprint " & Cert
    WSHShell.Run cmdLine_, 2, true

Next

' Закрываем хранилище
Set Store     = Nothing
Set WSHShell     = Nothing

Работает