Question [Surveillance] Evénements Windows

Plus d'informations
il y a 16 ans 2 mois #5971 par Laurent Dardenne
Tu trouveras qq solutions dans le tutoriel cité précédement.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 2 mois #5995 par TimCruz
Merci Laurent. En effet, ton tuto m'a beaucoup aidé. Après avoir bien creusé interrogation de la WMI par PS, je m'aperçois qu'une étude de cas du livre d'Arnaud et Robin traite concrètement de mon cas.:whistle: Pas de bol! Enfin quoi que j'ai bien plus appris en décortiquant dans tous les sens qu'en copiant/collant...bref!

J'ai toujours, malgré tout, un problème. Voici en préambule mon code :
[code:1]$Computer =\"MONSERVEUR\"
$query = New-Object System.Management.WQleventquery \"SELECT * FROM __InstanceCreationEvent
WITHIN 600
WHERE TargetInstance ISA 'Win32_NTLogEvent'
AND TargetInstance.EventCode= '540'\"
$Scope = new-object System.Management.ManagementScope(\"\\$Computer\root\cimv2\"«»)
$watcher = New-Object System.Management.ManagementEventWatcher $scope,$query
$watcher.PSbase.Scope.Options.EnablePrivileges = $true


$watcher.start()
$compteur=0
$info

while ($true)
{
$event = $watcher.WaitForNextEvent()

If ($event -ne $null)
{
$info=$info+\"`n`n $($event.TargetInstance.Message) `n`n\"
$compteur=$compteur+1


If ($compteur -ge '15')
{

$expediteur = 'ADDRESSEMAIL'
$destinataire = 'ADDRESSEMAIL'
$serveur = 'MONSERVEUREXCHANGE'

$objet = 'ALERTE JOURNAL EVENEMENT ' + [System.DateTime]::Now
$texte = \"Nouvel evenement Server Administrator dans le journal de log Ms Windows `n`n $info\"

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte

$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials

$client.Send($message)
$info=\"\"

$compteur=0
}
}
}
[/code:1]

L'objectif est de rassembler par paquet de 15 les alertes de Server Administrator (service de surveillance matériel de DELL) dans l'observateur d'événement et de me les envoyer par mail. Le script s'exécute sans encombres mais les mails ne partent pas. Par contre, quand j'arrête le script, mes mails me sont tous envoyés d'un coup!

Pourtant si au lieu de l'envoie de mail dans ma boucle je mets par ex. un write-host \"toto\" mon shell va bien m'indiquer \"toto\". Sauriez vous me dire pourquoi?

Merci d'avance.

\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"

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

Plus d'informations
il y a 16 ans 2 mois #5996 par Laurent Dardenne
Salut,
TimCruz écrit:

Sauriez vous me dire pourquoi?

Je pencherais pour un pb de blocage de thread, mais j'ai peu d'éléments à faire valoir :

Cette méthode bloque l'exécution pendant la transmission du message électronique.

C'est à dire, enfin je suppose, qu'en fin d'exécution le mail a bien été remis au serveur.
1-Vérifie si le message est bien présent sur le serveur.
2-Envoi le mail avec les infos telles qu'elles sont dans ton dernier message, c'est à dire avec des valeurs erronées pour le send, dans ce cas tu devrais avoir une exception.
3-En test, place un sleep 1 juste après le send.

Sinon il y a l'envoi en asynchrone , mais je ne suis pas sûr que ce soit judicieux. De plus on ne connait pas la source du pb existant.

Je pensais également à un verrouillage de ressource(s) mais je ne vois pas laquelle.

Je suppose que ce traitement, en commentant la boucle While, fonctionne correctement ?
Avec quelles versions de PS ce script doit fonctionner ? v1 ? v1+V2? v2 uniquement ?

Pas facile à debugger ton problème :silly:<br><br>Message édité par: Laurent Dardenne, à: 19/01/10 18:06

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 mois #6020 par TimCruz
Après un reboot de ma machine, ce re-fonctionne. J'ai préféré attendre quelques jours et rebooot pour m'en assurer avant de te répondre.

Voici le script fini, si vous avez des commentaires (comme je suis débutant) je suis preneur.

[code:1]#On se connecte à la WMI de $computer pour analyser l'observateur d'événements
$Computer =\&quot;.\&quot;
$query = New-Object System.Management.WQleventquery \&quot;SELECT * FROM __InstanceCreationEvent
WITHIN 600
WHERE TargetInstance ISA 'Win32_NTLogEvent'
AND TargetInstance.SourceName= 'Server Administrator'\&quot;
$Scope = new-object System.Management.ManagementScope(\&quot;\\$Computer\root\cimv2\&quot;«»)
$watcher = New-Object System.Management.ManagementEventWatcher $scope,$query
$watcher.PSbase.Scope.Options.EnablePrivileges = $true

$watcher.start() #ouverture de la connexion / du watcher
$compteur=0 #On initialise le compteur pour calculer le nombre d'entrées dans le log d'événements
$info

while ($true)
{
$event = $watcher.WaitForNextEvent()

If ($event -ne $null) #La boucle ne se déclanche que s'il y a des événements
{
#remplissage des fichiers tampons et compteur pour log et contenu du mail
$info=$info+\&quot;`n`n $($event.TargetInstance.Message) `n`n\&quot;

$compteur=$compteur+1

If ($compteur -ge '15') #On envoie un mail d'alerte avec les événements du journal quand un lot de 15 éxiste
{

$expediteur = 'ADRESSEMAIL'
$destinataire = 'ADRESSEMAIL'
$serveur = 'SERVEUREXCHANGE'

$dateev=[System.DateTime]::Now
$objet = \&quot;[$(get-wmiobject win32_computersystem).name] ALERTE JOURNAL EVENEMENT $dateev\&quot;
$texte = \&quot;Nouvelle(s) entrée(s) Server Administrator dans le journal de log Ms Windows `n`n $info\&quot;

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte

$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$client.Send($message)

#Réinitialisation des variables de compteur, de date et de contenu de mail après chaque envoie de mail
$info=\&quot;\&quot;
$compteur=0

$event=$null
}
}
}
[/code:1]<br><br>Message édité par: TimCruz, à: 25/01/10 16:55

\\&quot;Il n\'y a pas de probl&egrave;me, il n\'y a que des solutions\\&quot;

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

Plus d'informations
il y a 16 ans 1 mois #6023 par Laurent Dardenne
TimCruz écrit:

J'ai préféré attendre quelques jours et rebooot pour m'en assurer avant de te répondre.

Merci, j'ai testé ton code sur mon poste, mais je n'ai pas rencontré ce pb.

TimCruz écrit:

Voici le script fini, si vous avez des commentaires

Pour
[code:1]$info[/code:1]
Il n'en manque pas un bout $Info=\&quot;\&quot; ?
Pour les adresses m'est avis qu'il mieux les modifier dans le post précédent, afin d'éviter les robots de spam.
[code:1]$compteur=$compteur+1[/code:1]
faire
[code:1]$compteur++[/code:1]
C'est pareil, mais il y a moins de saisie.
[code:1]
If ($compteur -ge '15')
[/code:1]
ça c'est comme l'ammoniac, \&quot;ça pique les yeux\&quot;.
C'est LE truc à éviter. Soit tu manipules un entier soit une chaîne de caractères, la confusion se situe dans le choix du type de la valeur à tester.
A priori la notion de compteur référence un entier, ceci est donc préférable :
[code:1]
If ($compteur -ge 15)
[/code:1]
Ainsi tu évites des conversions de type inutiles, dans ton cas cela ne change pas grand chose, mais ce n'est pas une raison pour le faire :).

Le pb se situe à la relecture, car du coup on ne sait pas trop ce que $compteur référence, ni quel est le rôle de cette conversion.
C'est tout à fait possible de procéder ainsi, MAIS dans ce cas il faut le documenter, sinon c'est un peu comme dans le film Alien, « dans l'openspace, tout le monde vous entendra crier » :)<br><br>Message édité par: Laurent Dardenne, à: 25/01/10 16:52

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 mois #6024 par TimCruz

ça c'est comme l'ammoniac, \&quot;ça pique les yeux\&quot;.

Merci beaucoup de tes conseils et désolé de la douleur que je t'ai infligé aux noeils!! :whistle:

Pour les adresses m'est avis qu'il mieux les modifier dans le post précédent, afin d'éviter les robots de spam.

:woohoo: Oups!Oups!Oups!Gaffe.... Merci!

Encore une fois Laurent, je te tire mon chapeau, tu réponds toujours vite et bien à mes demandes, c'est un plaisir de bénéficier de ton aide!!

\\&quot;Il n\'y a pas de probl&egrave;me, il n\'y a que des solutions\\&quot;

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

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