1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
# Nombre de jours restant avant expiration
$threshold = 365
# Chemin des fichiers
$chemin = "C:\TEMP\Scan_Cert"
Start-Transcript $chemin\Check_Certificats.log
##################################################################
# Suppression des fichiers prealablement utilises s'ils existent #
##################################################################
if (test-path $chemin\servers.txt)
{
Remove-Item $chemin\servers.txt
}
if (test-path $chemin\cert_exp.txt)
{
Remove-Item $chemin\cert_exp.txt
}
##############################################################################
# Recherche des serveurs a scanner dans l'OU XX - Resultats dans servers.txt #
##############################################################################
$searcher=new-object System.DirectoryServices.DirectorySearcher([adsi]'LDAP://ou=XX,ou=servers,dc=domain,dc=fr','objectCategory=computer')
$searcher.FindAll()|%{$_.Properties.name}|Out-File $chemin\servers.txt
###########################################
# Pour chaque serveur dans servers.txt... #
###########################################
foreach($Name in (get-content $chemin\servers.txt))
{
################################
# Si le serveur repond au ping #
################################
if (test-connection -computername $name -count 1 -Quiet)
{
################################
# Extraction des certificats #
################################
# Calcul de la date supposee d'expiration
$deadline = (Get-Date).AddDays($threshold)
# Connexion au magasin du serveur
$store=new-object System.Security.Cryptography.X509Certificates.X509Store("\\$Name\my","LocalMachine")
# Ouverture du magasin en lectrure seule
$store.open("ReadOnly")
# Extraction des certificats expirant avant la DeadLine - Redirection des résultats dans Cert_exp.txt
$store.certificates | % {
If ($_.NotAfter -lt $deadline) {
$_ | Select Issuer, Subject, NotAfter, @{Label="ExpiresIn"; Expression={($_.NotAfter - (Get-Date)).Days}}}
}>$chemin\Cert_exp.txt
# Recuperation de la taille du fichier Cert_exp.txt
$TailleFichier = Get-ChildItem $chemin\cert_exp.txt;
# Test de la taille du fichier - Si O octet ==> envoi d'un mail "Pas de certificat arrivant a expiration d'ici xx mois"
if ($TailleFichier.length -eq 0)
{
###############################################################
# ENVOI DU MAIL : AUCUN CERTIFICAT A EXPIRATION #
###############################################################
# Serveur SMTP
$serveur = "smtp.domain.fr"
# Expediteur
$expediteur = "name_exp@domain.fr"
# Destinataire
$destinataire = "name_dest@domain.fr"
# Objet
$objet = "$Name - Pas de certificat arrivant à expiration dans les $threshold jours à venir"
# Corps du message
$texte = "Aucun certificat arrivant à expiration d'ici $threshold jours"
# Creation du message
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
# Connection au serveur SMTP
$client = new-object System.Net.Mail.SmtpClient $serveur
# Authentification au serveur SMTP lorsqu'elle est requise
$client.Credentials = New-Object System.Net.NetworkCredential("name_exp@domain.fr", "user");
# Envoi du mail
$client.Send($message)
}
# Si cert_exp.txt > O octet ==> envoi d'un mail "Certificat(s) arrivant a expiration d'ici xx mois"
else{
####################################################################
# ENVOI DU MAIL : X CERTIFICAT ARRIVANT A EXPIRATION #
####################################################################
# Serveur SMTP
$serveur = "smtp.domain.fr"
# Expediteur
$expediteur = "name_exp@domain.fr"
# Destinataire
$destinataire = "name_dest@domain.fr"
# Objet
$objet = "$Name - Expiration des certificats dans les $threshold jours à venir"
# Corps du message
$texte = [string]::join([environment]::NewLine, (get-content "$chemin\Cert_exp.txt"))
# Creation du message
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
# Connection au serveur SMTP
$client = new-object System.Net.Mail.SmtpClient $serveur
# Authentification au serveru SMTP lorsqu'elle est requise
$client.Credentials = New-Object System.Net.NetworkCredential("name_exp@domain.fr", "dsii");
# Envoi du mail
$client.Send($message)
}
}
}
##################################################################
# Suppression des fichiers utilises s'ils existent #
##################################################################
if (test-path $chemin\servers.txt)
{
Remove-Item $chemin\servers.txt
}
if (test-path $chemin\cert_exp.txt)
{
Remove-Item $chemin\cert_exp.txt
}
Stop-transcript |
Partager