Envoyer un email d'alerte à partir de l'analyseur de Performances à l'aide de PowerShell script
J'ai créé une alerte dans l'analyseur de Performances (Windows Server 2008 R2) qui devrait être déclenché à chaque fois qu' \Processeur(_Total)\% Temps Processeur est au-Dessus de 10 (une petite valeur juste pour garantir que la condition d'envoi de l'alerte est toujours respecté). Vous pouvez voir l'Alerte propriétés de Tâche dans l'image.
En outre, j'ai également créé une nouvelle tâche dans le Planificateur de Tâches, qui sera exécuté si l'utilisateur est connecté ou pas, et il sera exécuté avec des privilèges plus élevés. L'élément déclencheur de cette tâche a les propriétés suivantes:
- Commencer la tâche: Sur un événement
- Paramètres De Base:
- Journal: Système
- Source: Processeur
Les Actions (et c'est la partie que je ne sais pas si c'est correct) avec les paramètres suivants:
- Action: lancer un programme
- Programme/script: le chemin vers un script PowerShell pour envoyer un courriel.
Le PowerShell code est le suivant ($nom, $date, $compteur, $seuil, $valeur sont censés venir à partir de l'analyseur de Performances ensemble de collecteurs de données d'alerte propriétés de tâche, comme dans l'image ci-dessus):
function SendMail ($name, $date, $counter, $threshold, $value) {
$MailMessage = New-Object Net.Mail.MailMessage
$MailMessage.To.Add("[email protected]")
$MailMessage.From = "[email protected]"
$MailMessage.Subject = "ALERT - Performance Monitor"
$MailMessage.IsBodyHtml = $True
$MailMessage.Body = @"
<html><head></head><body>
The following counter needs attention:<BR><BR>
Name: $($name)<BR>
Date: $($date)<BR>
Counter: $($counter)<BR>
Threshold: $($threshold)<BR>
Actual Value: $($value)<BR>
<FONT face=Courier>$($html)</FONT>
<BR>
--- Automatically generated with SENDMAIL function ---
</body>
</html>
"@
$SmtpClient = New-Object Net.Mail.SmtpClient("blah.bleh")
$SmtpClient.Send($MailMessage)
}
Une fois la tâche a commencé, j'ai la suite de l'Histoire: la Tâche a Commencé, l'Action a Commencé, et a Créé demander Processus. L'e-mail n'est jamais envoyé.
J'ai essayé d'envoyer un e-mail à l'aide de l'Action: Envoyer un e-mail, et il a bien fonctionné. Personne ne sait ce qui pourrait être mauvais?
Entendez-vous les paramètres $nom, $date, etc? Si oui, comment puis-je vérifier? Si vous faites référence au paramètre comme le courrier électronique, serveur smtp, etc, je suis en utilisant le même que j'ai utilisé dans l'Action: Envoyer un e-mail (avec la différence que, dans le script, mon serveur smtp commence par "SMTP." (Et malheureusement, je ne suis pas en utilisant v3 🙁
Le code que vous avez posté définit une fonction, mais je ne vois pas de vous en appelant cette fonction n'importe où.
Pour le tester, commenter tout et les valeurs de sortie vers un fichier texte.
PSv2 a Envoyez-MailMessage.
OriginalL'auteur Anna | 2013-08-27
Vous devez vous connecter pour publier un commentaire.
Il existe essentiellement deux choses, à l'adresse qui doit faire ce travail pour vous.
Nous allons commencer avec les paramètres. Sur le qui-vive onglet Tâche de votre alerte (photo ci-dessus), de modifier les Arguments de la Tâche de champ et de le remplacer:
avec:
Vos paramètres sont fondamentalement être analysée comme un espace séparé de la chaîne de valeur, nous avons donc ajouter des guillemets autour de chaque paramètre jeton de gérer des valeurs que sont l'espace, et on ajoute un espace entre chaque paramètre individuel jeton de sorte que nous allons être en mesure de dire à un paramètre de l'autre.
Ensuite, pour l'action de votre tâche planifiée (nommé "Processeur de Surveillance"), vous avez à le faire qu'à attendre les paramètres de l'alerte et de transmettre ces paramètres pour le script PowerShell.
Votre Action est correcte, c'est à dire "Démarrer un programme".
Pour le Programme/script, tapez "powershell.exe" (ou recherchez le chemin d'accès complet).
Et pour Ajouter des Arguments de champ, entrez ceci:
Où
perfmon_send_email.ps1
est le fichier script contenant votre fonction SendMail() comme décrit ci-dessus.Ce morceau était un peu capricieux, il peut donc y avoir d'autres façons de le mettre en place, mais explicitement à l'aide de la
-File
paramètre fait une différence pour mes tests. Le$(Arg0)
partie est ce qui sera remplacé par le paramètre de la chaîne de l'Alerte lorsque la tâche planifiée s'exécute PowerShell pour exécuter votre script.Ce qui devrait rendre les paramètres d'Alerte à la disposition de votre script PowerShell. Maintenant, tout ce que vous avez à faire c'est d'appeler la fonction que vous avez déjà définis. Ajoutez les lignes suivantes à la fin de votre script (d'après la définition de la fonction):
$args
est un tableau contenant les valeurs de paramètre passé à un fichier de script appelé à partir de la ligne de commande, ce qui est exactement ce que nous avons configuré la tâche planifiée à faire.Puisque nous savons que l'alerte sera toujours envoyer les mêmes valeurs dans le même ordre, à savoir, le nom, la date, le compteur, le seuil et la valeur, il nous suffit de les tirer de l'argument de ligne de commande basée sur la position et les passer à la fonction SendMail ().
Noter qu'il y a plus robuste façons pour traiter les arguments de ligne de commande, mais cela devrait être suffisant pour vos besoins.
Jamais l'esprit! Le problème est que j'ai mis mon client smtp pour être "SMTP.blah.bleh", alors qu'elle a juste besoin d'être "blah.bleh" 🙂
Alors j'ai finalement obtenu le script pour envoyer des emails correctement (YAY!!!). Mais les paramètres ne sont pas passés dans l'e-mail. Donc, c'est le corps de l'email: <html><head></head><body>=0D=0AThe compteur suivant les besoins à l'attention de:<BR><BR>==0D=0AName: $(Arg0)<BR>=0D=0ADate: <BR>=0D=0ACounter: <BR>=0D=0AThreshold:=<BR>=0D=0AActual Valeur: <BR>=0D=0A<FONT face=3DCourier></font>=0D=0A=0D=0A<BR>==0D=0A--- généré Automatiquement avec la fonction SENDMAIL ---=0D=0A = </body>=0D=0A </html>. Le compteur devrait être "% Temps Processeur", Seuil devrait être de 10, et la valeur réelle devrait être autour de 50. Toutes les pensées?
Ce que j'ai trouvé est que le mail est envoyer uniquement une fois que je commence la tâche, non pas lorsqu'il détecte que le compteur de performance est au-dessus de la limite (c'est pourquoi aucune des valeurs sont affichées dans l'e-mail). Au départ, j'ai eu ma tâche dans le planificateur de tâches étant déclenché "un événement", avec le Journal en cours de Système et la Source du Processeur et bien entendu ça ne fonctionne pas. Puis j'ai changé le Journal de l'Application et de la Source à la PrefCtrs, mais encore le compteur est déclenché uniquement lorsque je démarre la tâche. Quel peut être le problème?
Je ne sais pas si le Journal et les valeurs de la Source de faire une différence, ou pas. Je suis sûr que c'est simplement en regardant le nom; peut-être, assurez-vous que votre nom de la tâche correspond exactement à la valeur spécifiée sur l'alerte "tâche" de l'onglet alerte, c'est à dire "Processeur de Suivi" dans votre capture d'écran ci-dessus.
OriginalL'auteur Matt