
Comment déclencher une alerte par courrier électronique lorsqu'un service Windows spécifique démarre ou s'arrête sur Windows Server 2016 – Mise en cluster pour de simples mortels – Bien choisir son serveur d impression
Sommaire
introduction
Dans mon dernier post. Étape par étape: Comment déclencher une alerte par courrier électronique à partir d'un événement Windows contenant les détails de l'événement à l'aide de Windows Server 2016, je vous ai montré comment envoyer une alerte par courrier électronique en fonction des identificateurs d'événement Windows spécifiques consignés dans un journal des événements Windows. Bien que cela fonctionne très bien pour la plupart des événements, il n'est pas idéal si vous souhaitez être averti du démarrage ou de l'arrêt d'un service Windows spécifique.
Lorsqu'un service Windows démarre ou arrête un EventID 7036 de la source «Service Control Manager» est consigné dans le journal système Windows. Désormais, nous pourrions simplement configurer un déclencheur pour envoyer un courrier électronique chaque fois que cet ID d’événement est enregistré, comme décrit dans mon précédent message. Toutefois, vous ne voudrez peut-être pas recevoir un courrier électronique lorsque CHAQUE service Windows démarre ou s’arrête.
Pour être un peu plus spécifique, nous devrons éditer les données XML associées au filtre d'événements Windows lorsque nous aurons configuré le déclencheur pour examiner un peu plus en profondeur les propriétés des événements et filtrer les données EventData qui ne sont affichées que lorsque vous affichez la vue XML. sous l'onglet Détails d'un événement Windows.
Ce travail a été vérifié sur Windows Server 2016, mais je suppose qu'il devrait également fonctionner sur Windows Server 2012 R2 et Windows Server 2019. Si vous le faites fonctionner sur d'autres plates-formes, merci de commenter et de nous faire savoir si vous devez changer quoi que ce soit.
Étape 1 – Écrire un script Powershell
La première chose à faire est d’écrire un script Powershell qui, lorsqu’il est exécuté, peut envoyer un courrier électronique. En faisant des recherches sur ce sujet, j’ai découvert de nombreuses façons d’accomplir cette tâche. Ce que je vais vous montrer n’est qu’un moyen, mais n'hésitez pas à expérimenter et à utiliser ce qui convient à votre environnement.
Dans mon laboratoire, je n'exécute pas mon propre serveur SMTP. J'ai donc dû écrire un script permettant de tirer parti de mon compte Gmail. Vous verrez dans mon script Powershell que le mot de passe du compte de messagerie authentifié sur le serveur SMTP est en texte brut. Si vous craignez que quelqu'un ait accès à votre script et découvre votre mot de passe, vous voudrez alors chiffrer vos informations d'identification. Gmail requiert une connexion SSL. Votre mot de passe doit donc être en sécurité sur le réseau, comme tout autre client de messagerie.
Voici un exemple de script Powershell qui, lorsqu'il est utilisé avec le planificateur de tâches, envoie automatiquement une alerte par courrier électronique lorsqu'un événement spécifié est enregistré dans le journal des événements Windows. Dans mon environnement, j'ai enregistré ce script dans C: Alerts ServiceAlert.ps1.
$ filter = "*[System[EventID=7036] et EventData[Data='SIOS DataKeeper']]" Filtre $ A = Get-WinEvent -LogName System -MaxEvents 1 -FilterXPath $ $ Message = $ A.Message $ EventID = $ A.Id $ MachineName = $ A.MachineName $ Source = $ A.ProviderName $ EmailFrom = "sios@medfordband.com" $ EmailTo = "sios@medfordband.com" $ Subject = "Alert From $ MachineName" $ Body = "EventID: $ EventID`nSource: $ Source`nMachineName: $ MachineName` n $ Message " $ SMTPServer = "smtp.gmail.com" $ SMTPClient = New-Object Net.Mail.SmtpClient ($ SmtpServer, 587) $ SMTPClient.EnableSsl = $ true $ SMTPClient.Credentials = New-Object System.Net.NetworkCredential ("sios@medfordband.com", "MySMTPP @ 55w0rd"); $ SMTPClient.Send ($ EmailFrom, $ EmailTo, $ Subject, $ Body)
Voici un exemple d’e-mail généré à partir de ce script Powershell.
Vous avez probablement remarqué que ce script Powershell utilise l'applet de commande Get-WinEvent pour saisir l'entrée de journal des événements la plus récente basée sur le nom de fichier LogName, EventID et. EventData spécifié. Il analyse ensuite cet événement et affecte les variables EventID, Source, MachineName et Message aux variables qui seront utilisées pour composer le courrier électronique. Vous constaterez que les éléments LogName, EventID et EventData spécifiés sont identiques à ceux que vous spécifierez lors de la configuration de la tâche planifiée à l'étape 2.
Bien que EventID, LogName vous soient probablement familiers, EventData peut ne pas l'être aussi. Pour voir les données EventData associées à un événement particulier, vous devez ouvrir l'événement dans l'observateur d'événements, consultez l'onglet Détails, puis sélectionnez la vue XML. Dans la vue XML, vous pouvez voir toutes les données incluses dans un événement. Au bas du XML, vous verrez un tableau de données appelé
Étape 2 – Configurer une tâche planifiée
Dans le Planificateur de tâches, créez une tâche comme indiqué dans les captures d'écran suivantes.
- Créer une tâche
Assurez-vous que la tâche est définie sur Exécuter, que l'utilisateur soit connecté ou non.
- Dans l'onglet Déclencheurs, choisissez Nouveau pour créer un déclencheur qui lancera la tâche «Sur un événement». Dans mon exemple, je vais créer un événement qui déclenche chaque fois que DataKeeper (extmirr) enregistre un événement important dans le journal système.
Créez un événement personnalisé et un nouveau filtre d'événements, comme indiqué ci-dessous…Pour mon déclencheur, vous pouvez commencer à configurer un déclencheur qui surveille 7036 comme je le décris dans mon article précédent. Cependant, l'interface graphique de filtre ne nous permet pas de spécifier le nom de service stocké dans Param1 de EventData, comme je l'ai décrit précédemment. Afin de surveiller uniquement le service spécifique qui nous intéresse, nous aurons besoin de modifier le code XML directement, comme indiqué ci-dessous.
Si vous préférez simplement passer directement à la chasse, n'hésitez pas à copier mon code XML ci-dessous et à remplacer "SIOS DataKeeper" par les données d'événement stockées dans le paramètre 1 de l'événement que vous souhaitez surveiller. - Une fois le déclencheur d'événements configuré, vous devez configurer l'action qui se produit lors de l'exécution de l'événement. Dans notre cas, nous allons exécuter le script Powershell que nous avons créé à l'étape 1.
- Les paramètres de condition par défaut devraient être suffisants.
- Enfin, dans l'onglet Paramètres, veillez à autoriser l'exécution de la tâche à la demande et à «Mettre en file d'attente une nouvelle instance» si une tâche est déjà en cours d'exécution.
Étape 3 (si nécessaire) – Corrigez l'erreur d'événement ID: 10016 de Microsoft-Windows-DistributedCOM
En théorie, si vous avez tout fait correctement, vous devriez maintenant commencer à recevoir des courriels chaque fois qu'un des événements que vous surveillez est enregistré dans le journal des événements. Cependant, j'ai rencontré un problème de permission étrange sur l'un de mes serveurs que je devais résoudre avant que tout fonctionne. Je ne sais pas si vous rencontrerez ce problème, mais juste au cas où voici le correctif.
Dans mon cas, lorsque je déclenchais manuellement l'événement ou si j'exécutais directement le script Powershell, tout fonctionnait comme prévu et je recevais un courrier électronique. Toutefois, si l'un des EventID surveillés était enregistré dans le journal des événements, aucun courrier électronique ne serait envoyé. Le seul indice que j'avais était l'ID d'événement: 10016 qui était enregistré dans mon journal des événements systèmes à chaque fois que je m'attendais à ce que le déclencheur de tâche détecte un événement enregistré.
Nom du journal: système Source: Microsoft-Windows-DistributedCOM Date: 27/10/2018 17:59:47 ID d'événement: 10016 Catégorie de tâche: Aucune Niveau: erreur Mots-clés: Classique Utilisateur: DATAKEEPER dave Ordinateur: sql1.datakeeper.local La description: Les paramètres d'autorisation spécifiques à l'application n'accordent pas l'autorisation d'activation locale pour l'application COM Server avec CLSID D63B10C5-BB46-4990-A94F-E40B9D520160 et APPID 9CA88EE3-ACB7-47C8-AFC4-AB702511C276 à l'utilisateur DATAKEEPER dave SID (S-1-5-21-25339xxxxx-208xxx580-6xxx06984-500) à partir de l'adresse LocalHost s'exécutant dans le conteneur d'applications Indisponible SID (Indisponible). Cette autorisation de sécurité peut être modifiée à l'aide de l'outil d'administration des services de composants.
La plupart des résultats de recherche Google indiquant cette erreur indiquent que l'erreur est bénigne et incluent des instructions sur la manière de supprimer l'erreur au lieu de la corriger. Cependant, j’étais à peu près sûr que cette erreur était la cause de mon échec actuel à pouvoir envoyer une alerte par courrier électronique à partir d’un événement planifié déclenché à partir d’une entrée du journal des événements surveillée; j’avais donc besoin de la réparer.
Après beaucoup de recherches, je suis tombé sur cette discussion de groupe de discussion. La réponse de Marc Whittlesey m'a orienté dans la bonne direction. C'est ce qu'il a écrit…
Il y a 2 clés de registre pour lesquelles vous devez définir des autorisations avant d'accéder à la configuration DCOM dans les services de composants: Clé CLSID et clé APPID.
Je vous suggère de suivre quelques étapes pour résoudre le problème:
1. Appuyez sur les touches Windows + R, tapez regedit et appuyez sur Entrée.
2. Accédez à HKEY_Classes_Root CLSID * CLSID *.
3. Faites un clic droit dessus puis sélectionnez permission.
4. Cliquez sur Advance et changez le propriétaire en administrateur. Cliquez également sur la case qui apparaîtra sous la ligne du propriétaire.
5. Appliquer un contrôle total.
6. Fermez l'onglet, puis accédez à HKEY_LocalMachine Software Classes AppID * APPID *.
7. Cliquez dessus avec le bouton droit, puis sélectionnez permission.
8. Cliquez sur Avancé et changez le propriétaire en administrateurs.
9. Cliquez sur la case qui apparaîtra sous la ligne du propriétaire.
10. Cliquez sur Appliquer et accordez un contrôle total aux administrateurs.
11. Fermez tous les onglets et allez à l'outil d'administration.
12. Services de composants ouverts.
13. Cliquez sur Ordinateur, sur mon ordinateur, puis sur DCOM.
14. Recherchez le service correspondant qui apparaît dans la visionneuse d'erreurs.
15. Faites un clic droit dessus, puis cliquez sur Propriétés.
16. Cliquez sur l'onglet Sécurité, puis sur Ajouter un utilisateur, Ajouter un système, puis cliquez sur Appliquer.
17. Cochez la case Activer local.Donc, utilisez les clés appropriées ici et la configuration DCOM devrait vous donner accès aux zones grisées:
CLSID D63B10C5-BB46-4990-A94F-E40B9D520160APPID 9CA88EE3-ACB7-47C8-AFC4-AB702511C276
J'ai été capable de suivre les étapes 1 à 15 à peu près textuellement. Cependant, quand je suis arrivé à l'étape 16, je ne pouvais vraiment pas dire exactement ce qu'il voulait que je fasse. Au début, j’ai accordé le contrôle total du compte utilisateur DATAKEEPER dave au RuntimeBroker, mais cela n’a pas réglé le problème. Finalement, je viens de sélectionner "Utiliser par défaut" sur les trois autorisations et cela a résolu le problème.
Je ne sais pas comment ni pourquoi cela s’est produit, mais j’ai pensé que je ferais mieux de tout écrire au cas où cela se reproduirait, car il m’a fallu un certain temps pour comprendre.Étape 4 – Automatisation du déploiement
Si vous devez activer les mêmes alertes sur plusieurs systèmes, vous pouvez simplement exporter votre tâche dans un fichier XML et l'importer sur vos autres systèmes.
Ou encore mieux, automatisez l'importation dans le cadre de votre processus de construction via un script Powershell après avoir rendu votre fichier XML disponible sur un partage de fichiers, comme indiqué dans l'exemple suivant.
PS C: > Register-ScheduledTask -Xml (get-content '\ myfileshare tasks DataKeeperAlerts.xml' | out-string) -TaskName "Alertes de service DataKeeper" - Utilisateur datakeeper dave -Password MyDomainP @ 55W0rd –Force
En résumé
J'espère que ce que j'ai fourni vous donnera tout ce dont vous avez besoin pour commencer à recevoir des courriels de notification d'alerte quel que soit le service Windows qui vous tient éveillé la nuit.
Ceci conclut ma série sur la configuration des alertes par courrier électronique. Dans cette série, j'ai couvert la configuration des alertes en fonction des compteurs Perfmon, des entrées de journal des événements et, dans cet article, des événements de démarrage et d'arrêt du service Windows. Bien sûr, vous pouvez étendre ces scripts Powershell décrits dans ces articles pour faire plus que simplement envoyer des courriels. De nombreuses alertes ou arrêts de service inattendus nécessitent généralement une correction. Pourquoi ne pas simplement écrire un script des étapes de la récupération et laisser la tâche déclenchée s'occuper du problème pour vous?
Personnellement, je vous recommande d'investir dans SCOM, SolarWinds ou un autre système de gestion d'entreprise, mais si cela ne figure pas dans les cartes sur lesquelles vous travaillez, ces articles peuvent vous aider.
Commentaires
Laisser un commentaire