Le script ci-dessous utilise le module powershell PSPKI pour determiner les certificats arrivant a expiration dans $offset jours. (60 par defaut) et alerte si il y a au moins un certificat concernés.
Le module PSPKI est disponible sur le lien https://pspki.codeplex.com/
#SCRIPT DE RAPPORT DES CERTIFICATS ARRIVANT A EXPIRATION
# ! : La variable $computername doit contenir imperativement le FQDN du serveur ADCS
#Parametres
param(
[string]$computername = "$env:computername.$env:userdnsdomain",
$offset = 60,
$WarnNbCert = 1
)
$Scriptname = "Check_ADCS_Certificat_Expiration"
#Verification de l'existence d'une source ayant le nom du script dans l'eventlog Application pour loguer certains events
Function NewEventSource
{
if(!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\services\eventlog\Application\$Scriptname"))
{
New-EventLog -LogName "Application" -Source $Scriptname
}
}
#Log du lancement du script
NewEventSource
Write-EventLog -LogName application -Source $Scriptname -EntryType Information -EventId 1002 -Message "Execution du script $Scriptname"
#Write-Host
Write-Host “Rapport des certificats délivrés par $computername arrivant a expiration dans $offset jours” -ForegroundColor “Yellow”
#Import PSPKI PowerShell module
if(Get-Module -Name PSPKI | Where-Object { $_.name -eq “PSPKI” })
{
Write-Host “PSPKI PowerShell module already imported…” -ForegroundColor “Yellow”
}
else
{
Write-Host “Importing PSPKI PowerShell module…” -ForegroundColor “Yellow”
try
{
Import-Module -Name PSPKI
}
catch
{
write-host "Erreur lors de l'import du module PSPKI - Verifier que le module est disponible"
}
}
Write-Host
Write-Host
$caname = $computername.ToLower()
$todaysdate = Get-Date
$count = Get-CertificationAuthority $caname | Get-IssuedRequest -Filter “NotAfter -ge $todaysdate”, “NotAfter -le $((Get-Date).AddDays($offset))” | Measure-Object | Select-Object -Property Count -ExpandProperty count
$countdisplay = "Nombre de certificats délivrés par $computername arrivant a expiration dans $offset jours: $count `n"
write-host -BackgroundColor white -ForegroundColor Blue $countdisplay
$display = $(Get-CertificationAuthority $caname | Get-IssuedRequest -Filter "NotAfter -ge $todaysdate", "NotAfter -le $((Get-Date).AddDays($offset))")
write-host "DETAILS:"
$display
$result = $display | foreach {$_.CommonName ; ":" ; $_.NotAfter ; " **** "}
# Ajout a l'eventlog
if ($count -ge $WarnNbCert)
{
NewEventSource
Write-EventLog -LogName application -Source $Scriptname -EntryType Warning -EventId 1001 -Message "$countdisplay (CommonName : NotAfter) `n $result"
}
Else
{
NewEventSource
Write-EventLog -LogName application -Source $Scriptname -EntryType Information -EventId 1000 -Message "$countdisplay"
}