Удалить просроченные сертификаты с помощью Powershell - PullRequest
2 голосов
/ 15 мая 2019

У меня есть простой сценарий для отображения всех сертификатов на сервере, я хотел бы расширить этот сценарий, чтобы затем удалить все сертификаты с истекшим сроком действия

Я попробовал несколько сценариев от MS и сторонних разработчиков, чтобы найти сертификаты для удаления, но мне не повезло, что они работают должным образом

Первый код, который я использую:

Сертификат Get-ChildItem: \ -Recurse

Этот скрипт Powershell показывает все сертификаты на сервере.

Пример вывода приведен ниже для каждого сертификата. Я хочу настроить таргетинг на поле NotAfter, чтобы скрипт удалил сертификат, если он устарел, чем сегодняшняя дата

Тема: Эмитент: Отпечаток: Дружественное имя: Не раньше, чем: NotAfter: Расширения

Я также хотел бы сделать это для списка серверов, запустить скрипт на каждом сервере в текстовом документе, запросить все сертификаты, затем удалить сертификаты, срок действия которых истек, и перейти к следующему серверу.

Я видел какой-то код, нацеленный на дату, например:

ForEach-Object -begin {$ now = get-date} -process {if ($ PSItem.NotAfter -lt $ now) {$ PSItem}} | Remove-Item

Я бы хотел, чтобы скрипт вышел и запросил сертификаты серверов, а затем удалил устаревшие сертификаты

1 Ответ

1 голос
/ 15 мая 2019

Что вы после этого. Это должно работать идеально для вас. Вы были близки в своей логике, просто казалось, что это немного не так.

$ListOfServers = Get-Content "c:\temp\serv.txt"

Foreach($Server in $ListOfServers) {
    Invoke-Command -ComputerName $Server -ScriptBlock {
        # Get Certificate list and assign to a variable
        $Certs = Get-ChildItem "Cert:\LocalMachine\My" -Recurse

        # Loop through each object in $Certs
        Foreach($Cert in $Certs) {
            # If The objects property "NotAfter" is older than the current time, delete
            If($Cert.NotAfter -lt (Get-Date)) {
                $Cert | Remove-Item
            }
        }
    }
}

Отредактировано на основе комментария для предотвращения случайного уничтожения всех сертификатов.

Чтобы получить список всех мест хранения сертификатов.

(Get-ChildItem -Path "Cert:" -Recurse `
    | Where-Object {($_).GetType().Name -eq 'X509Store'}).Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...