mercredi 14 mars 2012

Centraliser les journaux de serveurs Windows dans un mail via Powershell

20/03/2012 : 1.01 Amélioration du filtrage des doublons (sur le Message plutôt que ID + Source)

Enfin ! Retour sur Powershell !

PSEvents.ps1 est un script qui va vous permettre de recevoir chaque jour, par mail, une compilation des événements inscrits dans les journaux de votre parc de serveurs Microsoft sur les dernières 24H.

Comme une image vaut mieux qu'un long discours, voici un screenshot :

Chaque bloc séparé par une ligne correspond à une machine ; chaque tableau correspond à un journal particulier ; chaque ligne correspond à un événement et les liens de la dernière colonne sont des liens directs vers www.eventid.net et technet.microsoft.com (avec l'EventID et la Source en champs de recherche).

Comment fonctionne PSEvents.ps1 :

PSEvents.ps1 utilise deux fichiers CSV (à encoder en utf8, évitez les lignes vides et ne pas toucher à la 1ère ligne) :

 - PSEvents-Hosts.csv qui contient la liste des machines à scruter :


Remplissez le tableau selon ce modèle : chaque élément est entres guillemets et ces éléments sont séparés par une virgule.

La liste des journaux à surveiller doit être séparée par des points-virgules.
Sur la capture d'écran, la première ligne correspond aux journaux à scruter sur un contrôleur de domaine Active Directory.

Pour d'autres types de serveur, vous pouvez utilisez les journaux standards Application et System.
Le journal Security est très bavard, je vous recommande de l'ajouter uniquement si vous avez besoin d'y lire certaines informations.

- PSEvents-Exclusions.csv contient l'ID et la Source des événements à exclure du mail (des événements "maitrisés") :


Ce fichier fonctionne de la même façon que PSEvents-Hosts, guillemets et virgules en séparateur.

Le script lit ces fichiers CSV, absorbe les évenements des dernières 24h dans les journaux et sur les machines spécifiés, mets en forme et envoi cette compilation par mail.

Prérequis :

  • Remplir les fichiers CSV vus précédemment, les journaux doivent être inscrit en anglais (Security, System etc...)
  • Une ouverture réseau entre la machine qui exécute le script et les machines cible (il s'agit visiblement des ports standards de communication MS : 135, 139, etc.)
  • Une machine Windows 7 ou un serveur 2008 membre d'un domaine (je n'ai pas testé le script en workgroup) 

Installation :

1. Copiez le dossier PSEvents dans un partage réseau avec des droits limités aux administrateurs.
2. Créez une tâche planifiée :

Dans Outils d'administration, cliquez sur le Planificateur des tâches et créez une nouvelle tâche :


Planifiez le script tous les jours à minuit : (pour rappel, PSEvents extraiera les logs des dernières 24h) :

Au niveau de l'action :


Programme/script : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Ajouter des arguments : -command ". '\\NAS\Share$\PSEvents\PSEventd.ps1'"

Validez la tâche planifiée.

3. Adaptez les variables du script :
Il y a quelques variables à personnaliser : les chemins des CSV, la configuration de la messagerie, le niveau de criticité des messages (guillemets + virgules comme les CSV) la taille maximale des messages d'erreur :
# Chemin des CSV :
$arrHosts = Import-CSV \\NAS\share$\PSEvents\PSEvents-Hosts.csv
$arrExclude = Import-Csv \\NAS\share$\PSEvents\PSEvents-Exclusions.csv

# Variable d'expedition de mail :
$strExpediteur = 'JournauxServeursMS@domaine.fr'
$strDestinataire = 'destinataire@domaine.fr'
$strSrvSmtp = 'smtp.domaine.fr'

# Taille maximale des messages d'erreur (300 par défaut)
$intMaxMessSize = 300

# Niveau de log pour la plupart des journaux sauf Security. Peut être : Information, Warning, Error
$strEventTypeAll = "Warning", "Error"

# Niveau de log pour le journal Sécurité. Peut être : SuccessAudit, FailureAudit
$strEventTypeSev = "SuccessAudit", "FailureAudit"
4. Effectuez des tests :

Indiquez votre adresse mail dans la variable : $strDestinataire
Modifiez les fichiers CSV.
Ouvrez, sur la machine qui executera le script, une console Powershell en administrateur et executez le script manuellement :
.\PSEvents.ps1
Vous pourrez suivre le travail du script dans la console Powershell.
Lorsque vous serez satisfait du résultat, lancez la tâche planifiée manuellement pour vérifier son fonctionnement.
5. Mettre en production !

Gestion des erreurs :

Comme le montre la capture, quelques erreurs sont gérées, fautes de temps je n'ai pris en compte que les principales :
- Une machine injoignable sur le réseau
- Un journal inexistant ou incorrectement orthographié
- Aucun événement correspondant au niveau de criticité indiqué
- Le manque de droit pour lire un journal particulier (cela concerne souvent le journal Security)

Téléchargement :

Vous trouverez un zip de l'ensemble des fichiers nécessaire au fonctionnement du script sur le partage suivant : PSEvents.zip

2 commentaires:

  1. Bonjour Edouard,

    Superbe script qui me fait gagner un temps précieux au quotidien.
    Cependant, j'ai un message d'erreur sur les logs des serveurs virtuels sur VmWare, as tu une idée.

    Merci de ton retour.

    Cdt,

    Jimmy MARTIN

    RépondreSupprimer
  2. Bonjour Jimmy,

    Désolé de ne te répondre que maintenant, je n'ai probablement pas fait attention aux notifications.
    J'imagine que tu as dû résoudre ton problème maintenant ; peux-tu éventuellement me donner quelques détails ?
    Ca pourrait me permettre de mettre à jour le script pour capter des erreurs ou des pré-requis !

    Sur les retours en prod que j'ai eu, le seul élément bloquant est WinRM, qui doit être activé.

    Bien cordialement,

    Edouard

    RépondreSupprimer