Раздел: Скрипты

Поиск истекающих сертификатов

Очень просто — вывести список истекающих сертификатов с помощью powreshell.

Будем искать сертификаты, которые истекают в течение 30 дней, начиная с текущей даты.
Code:

$threshold = 30 #Количество дней вперёд, начиная с текущей даты.
$deadline = (Get-Date).AddDays($threshold) #Устанавливаем дату исчечения сертификата: текущая + 30 дней

Далее, мы указываем повершелл-диск CERT и путь для поиска сертификатов (для интереса — пусть будет рут, у меня нет никаких других сертификатов :) ), и для каждого из результата проверяем условие на истечение действия сертификата до указанной даты.
В случае выполнения условия, мы отбираем необходимые к показу поля (здесь — Issuer, Subject, NotAfter),
А так же формируем параметр, который показывает количество оставшихся дней до истечения сертификата: здесь Label — его название, Expression — вычисление количество оставшихся дней, как разность даты истечения и текущей даты.
Code:

Dir cert:LocalMachineRoot | foreach { If ($_.NotAfter -le $deadline) { $_ | Select Issuer, Subject, NotAfter, @{Label=”Expires In (Days)”
Expression={($_.NotAfter – (Get-Date)).Days}} } } | Format-list

В конце — форматируем вывод с помощью format-list, потому что в виде таблицы данные не уместятся в окне powershell.
Поля к показу можно указать так же Thumbprint, FriendlyName, NotBefore, Extensions.

Результат таков:

Можно поставить скрипт крутиться на сервере,
И Отсылать вам результат, если он находит истекающие сертификаты:
Code:

$email = Dir cert:LocalMachineRoot | foreach { If ($_.NotAfter -le $deadline) { $_ | Select Issuer, Subject, NotAfter, @{Label=”Expires In (Days)”
Expression={($_.NotAfter – (Get-Date)).Days}} } } | Format-list
if ($email) {Send-MailMessage -to "Admin" -from "CertificateScript" -subject "certificates" -body "$email" -smtpServer mailserver.mydomain.local}

Комментировать

Комментарии

3 × один =

  1. Приветствую!

    Спасибо за скрипт
    но у меня одна трабла и помогите мне с этим пожалуйста

    мне на почту в место вывода скрипта, приходят вот такие сообщения —

    Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData

  2. Здравствуйте!
    Видимо, в Format-list передаётся что-то корявое.
    Попробуйте без форматирования передать, просто удалите эту часть.