IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Check de la date d'expiration des certificats


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut Check de la date d'expiration des certificats
    Bonjour,

    Je souhaite apprendre à scripter en Powershell.
    J'ai fait un premier script powershell pour checker la date d'expiration des certificats sur des serveurs en particulier. Je précise que je n'ai aucune formation de programmeur. Mon script fonctionne mais on peut certainement l'améliorer ainsi que le mettre aux "normes" utilisées par les programmeurs en général. Je suis tout ouïe concernant vos suggestions d'améliorations. En souhaitant également que ça puisse servir à d'autres ensuite.

    Etapes du script :

    1 - Définir en jour la période au cours de laquelle des certificats arriveront à expiration
    2 - Définir le chemin des fichiers temporaires et des logs du script
    3 - Extraire les noms de machines d'une OU dans un *.txt
    4 - Tester la présence des machines sur le réseau
    5 - Pour celles qui ping extraire les informations concernant les certificats qui expireront d'ici la période définies en 1.
    6 - Envoi d'un mail avec ces informations pour chaque machine. Si pas de certificats arrivant à expiration sur une de ces machines, envoi d'un mail pour cette machine indiquant qu'aucun certificat n'arrivera à expiration au cours de la période définie en 1

    Les sources que j'ai utilisées sont entre autre :

    http://blogs.technet.com/b/heyscript...tificates.aspx
    http://powershell-scripting.com/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    pourquoi tu n'utilises pas le provider Certificate (get-psprovider) ?

    Sinon le reste du code est lisible, juste une remarque sur le formalisme des blocs de commentaire que je trouve un peu "lourd" et enfin, certains commentaires n'apporte rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     # Pour chaque serveur dans servers.txt...
    foreach ($Name in (get-content $chemin\servers.txt))
    Sous réserve de connaitre PS, la lecture du code suffit pour savoir ce qu'il fait et pour celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Si le serveur repond au ping
    Le cmdlet Get-Help est là pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Get-Help Test-Connection -Full


    [edit]
    Il manque peut être une gestion d'erreur...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut
    Bonjour,

    Je te remercie pour tes remarques et j'en prends bonne note.
    Pour le formalisme des commentaires c'est plus pour moi que pour les autres mais je crois être en mesure de le rendre moins lourd même pour moi maintenant

    Concernant le Provider Certificate (get-psprovider) je ne connais pas mais je vais me documenter car cela m'intéresse.

    Enfin pour la gestion des erreurs j'ai activé le transcript Powershell mais si je peux faire mieux je suis ouvert à toute proposition.

    J'ai écrit ce script en "pompant" des lignes à droite et à gauche sur le net. J'en ai fait 2 autres depuis et je commence à penser en Powershell et à "pomper" de moins en moins.

    Merci de concourir à mes progrès

Discussions similaires

  1. Date d'expiration des comptes AD
    Par nord dans le forum VBScript
    Réponses: 2
    Dernier message: 27/04/2009, 20h18
  2. [11g] Date d'expiration des comptes utilisateurs
    Par AyaGizmo dans le forum Administration
    Réponses: 2
    Dernier message: 13/02/2009, 17h56
  3. date d'expiration des cookies
    Par agrotic dans le forum ASP
    Réponses: 1
    Dernier message: 01/12/2006, 16h22
  4. Délai d'expiration des cookies
    Par Sylvain James dans le forum XMLRAD
    Réponses: 40
    Dernier message: 22/03/2006, 10h22
  5. [Filtre][Date d'expiration]
    Par tesla dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/09/2004, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo