Question [Résolu] Journal d'application par mail

Plus d'informations
il y a 9 ans 4 mois #22553 par Spywolf
Bonjour,

Je voudrais récupérer certains journaux d'application Windows, et je rencontre quelques difficultés avec la génération du titre dans lequel je voudrais intégrer la notion de succès ou d'échec

Mon fichier *.bat actuellement est :

[code:1]function sendMail{

Write-Host \"Sending Email\"

#SMTP server name
$smtpServer = \"SMTP\"

#Creating a Mail object
$msg = new-object Net.Mail.MailMessage
$texte = Get-EventLog Application | Where-Object {$_.EventID -eq 11707}

#Creating SMTP server object
$smtp = new-object Net.Mail.SmtpClient($smtpServer)

#Email structure
$msg.From = \"MAIL\"
$msg.To.Add(\"MAIL\"«»)
$msg.subject = $titre.Message
$msg.Body = $texte.Message

#Sending email
$smtp.Send($msg)

}
function generate_file{
# requete pour générer l'objet
$titre = \"Titre\"
}
function generate_file{
# requete pour récupérer le journal d'évènement
# et enregistrer le fichier
$texte = Get-EventLog Application | Where-Object {$_.EventID -eq 11707}
}

#Calling function
generate_file
sendMail[/code:1]

Il semblerait que ma compréhension du $texte modifié en $titre pour ne pas faire de doublon soit quelque peu eronnée...

Comment puis je faire ? Merci d'avance pour votre aide :)<br><br>Message édité par: Spywolf, à: 3/11/16 18:03

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 4 mois #22554 par Laurent Dardenne
Salut,
Spywolf écrit:

Comment puis je faire ?

Tuto Time !

Utilise la portée courante pour déclarer la variable Titre :
[code:1]
. generate_file
sendMail
[/code:1]
Mais auparavant renomme une des deux fonctions :)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 4 mois #22555 par Spywolf
Réponse de Spywolf sur le sujet Re:Journal d'application par mail
Haha ! ca fonctionne merci :p

Pour aller un peu plus loin, je voudrais que mon titre reprenne la notion de \&quot;succes\&quot; ou \&quot;echec\&quot; du log, et que mon corps reprenne la date et le message, mais je suis confronté à quelques nouveaux soucis ...

si j'ai plusieurs ID identiques, les données sont cumulées linéairement

[code:1] #Creating a Mail object
$msg = new-object Net.Mail.MailMessage
$titre = Get-EventLog Application 513
$texte = Get-EventLog Application 513[/code:1]

[code:1]
$msg.subject = $titre.entrytype
$msg.Body = $texte.timegenerated + $texte.message[/code:1]

[code:1]
function generate_title{
# requete pour récupérer le journal d'évènement et enregistrer le fichier
$titre = Get-EventLog Application 513
}
function generate_file{
# requete pour récupérer le journal d'évènement et enregistrer le fichier
$texte = Get-EventLog Application 513
}

#Calling function
generate_title
generate_file
sendMail[/code:1]

Plutôt que d'avoir toutes les heures a la suite puis tous les messages, je voudrais donc l'heure, le message, etc

J'ai testé

[code:1]
$msg.Body = $texte.timegenerated$texte.message

$msg.Body = $texte.timegenerated.message

$msg.Body = $texte.timegenerated $texte.message[/code:1]

mais aucune de ces syntaxes ne fonctionne ...

Pour simplifier le traitement, il faudrait que chaque mail soit limité à une ligne du journal

J'ai donc tenté
[code:1]
Get-EventLog Application -newest 1[/code:1]

mais visiblement cela prend en compte la dernière ligne du journal, et non la dernière ligne de l'ID concerné, de même avec

[code:1]
Get-EventLog Application -newest 1 | Where-Object {$_.EventID -eq 513}[/code:1]

qui ne fonctionne pas ...

Une idée ? ^^

Merci d'avance :)<br><br>Message édité par: Spywolf, à: 27/10/16 09:06

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 4 mois #22558 par Spywolf
Réponse de Spywolf sur le sujet Re:Journal d'application par mail
Bonjour,

J'ai pu progresser sur le script et ajouter une condition qui permet de déclencher le mail et ne me donner de manière lisible les informations voulues.

Me reste par contre une grand problématique pour l'initialisation ...

Je voudrais que ce script soit exécuté à partir du moment ou une nouvelle entrée journal correspondant à mon ID est créée ... mais est ce que je peux / doit gérer ca via PowerShell (en sachant que je devrais l'utiliser en *.BAT) ?

Question subsidiaire, je n'ai trouvé des eventlog que pour les journaux Windows, alors que mon script doit s'adapter à un journal d'application et de services. Quelle commande dois-je utiliser ?

Merci d'avance pour vos réponses à ces 2 questions

Pour info, voila la forme du script actuel :

[code:1]if (Get-EventLog Application 11707 | Where-Object {$_.EntryType -ne \&quot;success\&quot;})
{
Function SendMail{

Write-Host \&quot;Sending Email\&quot;

#SMTP Server Name
$smtpServer = \&quot;SMTP\&quot;

#Creating a Mail Object
$msg = new-object Net.Mail.MailMessage
$titre = (Get-EventLog Application 1001)[0]
$texte = (Get-EventLog Application 1001)[0]

#Creating SMTP Server Object
$smtp = new-object Net.Mail.SmtpClient($smtpServer)

#Email structure
$msg.From = \&quot;MAIL\&quot;
$msg.To.Add(\&quot;MAIL\&quot;«»)
$msg.Subject = \&quot;Journal \&quot; + $titre.EntryType
$msg.Body = \&quot;Date : \&quot; + $texte.TimeGenerated + \&quot;
Source : \&quot; + $texte.Source + \&quot;
Message : \&quot; + $texte.Message

#Sending Email
$smtp.Send($msg)

}
Function Generate_Title{
# requete pour extraire le journal : Type
$titre = (Get-EventLog Application 1001)[0]
}
Function Generate_File{
# requete pour extraire le journal : Date Source Message
$texte = (Get-EventLog Application 1001)[0]
}

#Calling Function
Generate_Title
Generate_File
SendMail
}[/code:1]

Et pour gérer le multi lignes, j'ai opté pour le script suivant, mais n'est il pas possible de simplifier le nombre de lignes ?

[code:1]Function SendMail{

Write-Host \&quot;Sending Email\&quot;

#SMTP Server Name
$smtpServer = \&quot;SMTP\&quot;

#Creating a Mail Object
$msg = new-object Net.Mail.MailMessage
$titre = (Get-EventLog Application 1000)[0]
$texte = (Get-EventLog Application 1000)[0]
$titre1 = (Get-EventLog Application 1000)[1]
$texte1 = (Get-EventLog Application 1000)[1]
$titre2 = (Get-EventLog Application 1000)[2]
$texte2 = (Get-EventLog Application 1000)[2]
$titre3 = (Get-EventLog Application 1000)[3]
$texte3 = (Get-EventLog Application 1000)[3]

#Creating SMTP Server Object
$smtp = new-object Net.Mail.SmtpClient($smtpServer)

#Email structure
$msg.From = \&quot;MAIL\&quot;
$msg.To.Add(\&quot;MAIL\&quot;«»)
$msg.Subject = \&quot;Journal \&quot; + $titre.EntryType + \&quot; / \&quot; + $titre1.EntryType + \&quot; / \&quot; + $titre2.EntryType + \&quot; / \&quot; + $titre3.EntryType
$msg.Body = \&quot;Date : \&quot; + $texte.TimeGenerated + \&quot;
Source : \&quot; + $texte.Source + \&quot;
Message : \&quot; + $texte.Message + \&quot;

***** ***** ***** \&quot; + \&quot;

Date : \&quot; + $texte1.TimeGenerated + \&quot;
Source : \&quot; + $texte1.Source + \&quot;
Message : \&quot; + $texte1.Message + \&quot;

***** ***** ***** \&quot; + \&quot;

Date : \&quot; + $texte2.TimeGenerated + \&quot;
Source : \&quot; + $texte2.Source + \&quot;
Message : \&quot; + $texte2.Message + \&quot;

***** ***** ***** \&quot; + \&quot;

Date : \&quot; + $texte3.TimeGenerated + \&quot;
Source : \&quot; + $texte3.Source + \&quot;
Message : \&quot; + $texte3.Message

#Sending Email
$smtp.Send($msg)
}
Function Generate_Title{
# requete pour extraire le journal : Type
$titre = (Get-EventLog Application 1000)[0]
}
Function Generate_File{
# requete pour extraire le journal : Date Source Message
$texte = (Get-EventLog Application 1000)[0]
}
Function Generate_Title{
# requete pour extraire le journal : Type
$titre1 = (Get-EventLog Application 1000)[1]
}
Function Generate_File{
# requete pour extraire le journal : Date Source Message
$texte1 = (Get-EventLog Application 1000)[1]
}
Function Generate_Title{
# requete pour extraire le journal : Type
$titre2 = (Get-EventLog Application 1000)[2]
}
Function Generate_File{
# requete pour extraire le journal : Date Source Message
$texte2 = (Get-EventLog Application 1000)[2]
}
Function Generate_Title{
# requete pour extraire le journal : Type
$titre3 = (Get-EventLog Application 1000)[3]
}
Function Generate_File{
# requete pour extraire le journal : Date Source Message
$texte3 = (Get-EventLog Application 1000)[3]
}

#Calling Function
Generate_Title
Generate_File
SendMail[/code:1]

Merci pour votre aide :)<br><br>Message édité par: Spywolf, à: 27/10/16 11:28

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 4 mois #22559 par Laurent Dardenne
Je ne répond qu'a la première question :
Spywolf écrit:

Je voudrais que ce script soit exécuté à partir du moment ou une nouvelle entrée journal correspondant à mon ID est créée

Soit du fait du polling (interrogation régulière) soit tu utilises un événement d'un objet EventLog (déclenchement automatique sous réserve d'avoir un process/script/tâche WMI qui tourne en continu).
Spywolf écrit:

mais est ce que je peux / doit gérer ca via PowerShell (en sachant que je devrais l'utiliser en *.BAT) ?

De devoir le gérer c'est toi qui voit.
Quant au .bat pourquoi en utiliser un ? Quel est son rôle ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 4 mois #22561 par Spywolf
Réponse de Spywolf sur le sujet Re:Journal d'application par mail
J'avoue que je ne sais pas vraiment ... peut être est ce que je mélange un peu tout.

Le fait d'avoir un *.bat devrait me permettre d'automatiser l'exécution du script, mais il est peut être possible de faire autrement ?

L'objectif final est de faire remonter des alertes d'échec située dans le journal d'application et de services d'un logiciel de sauvegarde afin de les recevoir par mail.

Peut être est ce que je m'y prends mal depuis le départ ?

Qu'en est il de mes 2 autres questions du coup ? Tu n'as peut être pas la réponse ? Aurais-tu des pistes ou je pourrais pousser mes recherches avancées ?

Merci pour ton aide :)

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.053 secondes
Propulsé par Kunena