script d'avertissement auto pour disque plein [RESOLU] - VB/VBA/VBS - Programmation
Marsh Posté le 19-08-2008 à 15:46:37
UP
Personne ne connait un script ou un batch qui pourrai surveiller l'espace disque sur un server ?
Marsh Posté le 19-08-2008 à 17:41:18
J'ai fais ça il y a un petit moment, c'est en place sur plusieurs serveurs avec une tache planifiée et ça fonctionne bien.
Ca ne sert pas que pour l'espace disque mais tu peux activer/désactiver les controles au besoin.
Code :
|
Marsh Posté le 20-08-2008 à 09:42:37
Super merci beaucoup je vien de tester ca fonctionne pas mal reste plus qu'a comprendre un peu ton code...
Il y a possiblité d'envoie j'ai vu ?
Marsh Posté le 20-08-2008 à 10:16:41
Salut,
Tu renseignes ces deux constantes :
# Const AdresseEmailDestinataire = ""
# Const AdresseServeurSmtp = ""
- tu peux mettre une adresse email, ou l'adresse d'une liste de distribution
- tu dois renseigner l'adresse de ton serveur smtp, en admettant qu'il accepte les connexions anonyme, l'email sera envoyé au format :
SysInfo@"le nom de la machine"
Cette constante active ou désactive (1/0) l'envoi de mail.
# Const EnvoyerUnMail = 1
Marsh Posté le 22-08-2008 à 09:59:56
Salut j'ai tester et franchement c'est pas mal, pas mal du tout même.
Question :
Peux t'ont shunter les popup et laisser que l'envoie de mail ? Si oui comment
A quoi servent les constantes au début du code ?
Comment éviter d'avoir le resultat sous forme de 2520,241198715 Mo, tout ce qu'il y a apres la virgule ne me sert pas peux t 'on l'enlever ?
Citation : # '################################################ |
Merci pour ta reponse
Marsh Posté le 22-08-2008 à 11:22:21
tecoxe a écrit : Salut, |
Je fais des test depuis ce matin, mas j'ai un problème pour l'envoie de mail, j'ai un serveur Exchange à qui j'ai activer les connexion anonyme (enfin je pense), mais il mets une erreur sur la ligne ".send", donc je pense que j'ai pas fais quelque chose sur le serveur Exchange, pourrais tu m'éclairer la dessus si tu connais.
Merci
Marsh Posté le 22-08-2008 à 13:41:02
kenji_lol a écrit : Salut j'ai tester et franchement c'est pas mal, pas mal du tout même. |
Je l'exécute en l'appelant avec cscript.exe, tu coup les messages sont affichés dans une fenêtre de ligne de commande (cmd.exe)
Mais si tu veux complétement supprimer les messages interactifis tu passes la constantes ConsoleDebug à 0.
# '################################################
# Const LimiteLecteurSysteme = 0.1 'décimales >> Le seuil d'alerte pour le disque systéme 0.1 = 10%
# Const LimiteLecteurAutre = 0.05 'décimales >> Le seuil d'alerte pour les autres disques physiques (pas les netuse par exemple) 0.05 =5%
# Const LimiteUtilisationCpu = 0.8 'décimales >> Le seule d'alerte de l'lutilisation Cpu 0.8 = 80%
# Const LimiteMemoireDisponible = 800 'en Mo >> Mémoire vive disponible
# Const FichierDeSortie = "c:\Wmi_SysInfo.txt" >> Le fichier de log
# Const AdresseEmailDestinataire = "" >> Une adresse email au format toto@pipo.fr
# Const AdresseServeurSmtp = "" >> le nom dns ou l'ip de ton serveur de messagerie
# Const ConsoleDebug = 1 >> Affichage des résultat de chaque alerte dans la console/popup (1 ou 0)
# Const EnvoyerUnMail = 1 >> Ben euh... Envoyer ou pas le mail. (1 ou 0)
# Const NomDeMachine = "." 'Mettre un . pour la machine locale
# Const SurveilleCpu = 1 >> Activer/Désactiver la surveillance du Cpu (1 ou 0)
# Const SurveilleDisk = 1 >> Activer/Désactiver la surveillance des disques (1 ou 0)
# Const SurveilleMemoire = 1 >> Activer/Désactiver la surveillance de la mémoire (1 ou 0)
# Const AfficherUptime = 0 >> Récupérer le temps depuis lequel la machine est démarrée. (1 ou 0)
# '################################################
Pour limiter le nombre de chiffres apres la virgule tu peux remplacer :
(Disk.FreeSpace/1000000) par FormatNumber((Disk.FreeSpace/1000000),2))
et
(Disk.Size/1000000) par FormatNumber((Disk.Size/1000000),2)
Ce qui devrait te donner juste 2 chiffres aprés là virgule.
Sinon pour le problème avec le .Send post le message d'erreur ici pour voir.
Marsh Posté le 22-08-2008 à 14:44:52
Trop fort t'assure (en meme temps c'est ton script lol)
Pour mon erreur d'envoie de mail voici le message :
Citation : C'est dans la fcontion sendmail() |
J'ai regarder un peu sur le net ce que je pouvais trouver sur ce code et apparement c'est du à l'utilisation d'un composant COM qui ne serait pas installer sur mon server 2003 ! Je sais pas trop...
Marsh Posté le 22-08-2008 à 15:18:44
Hum bizzare, je m'en sert sur des 2003 aussi.
Et le script utilise la bonne version de CDO, celle qui fonctionne sous 2003.
Tu es sur que ton smtp est accessible depuis ces machines ? Tu as essayé un telnet sur le port 25 ?
Marsh Posté le 22-08-2008 à 15:26:39
Je lance le script de ma machine donc je pense qu'il n y pas de soucis
[EDIT]
Peut etre pas en fait :
Connexion à smtp.serveur-1...Impossible d'ouvrir une connexion à l'hôte, sur le port 25: Échec lors de la connexion
[EDIT2]
J'ai fait un netstat -a mon port est bien à l'ecoute par contre je ne sais pas si ca joue mais avec le firewall apparement il est renommer en smtp
Marsh Posté le 22-08-2008 à 16:42:09
Probablement ton firewall qui bloque les connexions anonymes à ton serveur smtp.
Marsh Posté le 29-08-2008 à 14:17:55
Ca fonctionne SUper merci tecoxe.
En fait je recvais bien le mail sauf que Outlook envoyai directement celui dans mes courrier indesirable et comme je vais jamais voir la dedans
Merci encore c'est cool
Marsh Posté le 28-09-2009 à 15:46:59
bonjour à tous
Le code de tecoxe est tres intéressant pour moi
je souhaite l'utiliser mais cependant je souhaiterai lui passer le nom de la machine en paramètre lors de l'appel du script
comment est ce que je peux faire
merci
Marsh Posté le 28-09-2009 à 17:24:04
Tu remplaces :
Const NomDeMachine = "." à la ligne 16
par :
Dim NomDeMachine
If WScript.Arguments.Count >= 1 Then
NomDeMachine = WScript.Arguments.Item(0)
Else
NomDeMachine = "."
End If
Edit:
Par contre si tu le fais à distance il faut que tu ais les droits d'interroger le service wmi de la machine distante, j'ai pas testé ce cas là.
Marsh Posté le 29-09-2009 à 10:24:38
A distance cela fonctionne tres bien dans mon cas:
maintenant il faut que je trouve un solution pour automatiser la chose.
genre un fichier texte qui contient l'ensemble du parc serveur.
j'utilise un logiciel de supervision qui stocke mes serveurs dans une base sql;
comment via une requete qui interrogerai m DB sql dans ce script je pourrait exécuter le sript pour chaque machine
une idée?
Marsh Posté le 29-09-2009 à 11:07:23
benzure a écrit : A distance cela fonctionne tres bien dans mon cas: |
Quel type de bdd ?
Marsh Posté le 29-09-2009 à 12:08:45
Il me semble que tu peux interroger ton sql server express via un lien odbc dans un script vbs.
http://www.edugeek.net/forums/scri [...] erver.html
Marsh Posté le 01-10-2009 à 11:08:15
je souhaite supprimer mon fichier généré à la fin du script
voici la commande que j'ai ecrite mais pb
set f1= fso.deletefile(FichierDeSortie & "." & SystemName,true)
erreur : Objet requis: 'fso.deletefile(...)'
je vois pas l'erreur
Marsh Posté le 01-10-2009 à 11:16:49
c'est bon j'ai trouvé le pb
solution :
fso.deletefile FichierDeSortie & "." & SystemName,true
Marsh Posté le 01-10-2009 à 15:15:52
J'ai une autre demande.
Je souhaite par l'intermédiaire de ce script,
renseigner un fichier excel des données récoltées.
Par exemple si j'indique les colonnes se serai:
Nom serveur | Partition | Espace Libre| espace total |statut
dans le but de faire des stats
comment puis je faire celà
merci pour vos réponses
Marsh Posté le 01-10-2009 à 23:03:32
Le script crée un fichier de log :
Const FichierDeSortie = "c:\Wmi_SysInfo.txt"
Les infos sont séparées par des pipes "|".
Marsh Posté le 05-10-2009 à 08:44:34
oui j'avais vu mais comment généré directement un xls.
Le but du document excel est d'être consulté par un autre équipe en rapidité
Marsh Posté le 05-10-2009 à 09:45:55
l'idée était : lors d'un dépassement, renseigner une ligne du fichier excel avec les données du fichierDESortie,
Marsh Posté le 27-02-2020 à 09:16:20
bonjour,
Excusez moi de vous déranger mais j'utilise ce script si dessous pour surveiller l'espace disk mais il me reste un problème
c'est a dire si j'ai un serveur qui a un disk A, B et C et pour X raison sur un des disk,il est offline ou déconnecté, il ne me le signale pas!
avez vous une idée comment je pourrais absolument contrôler ces 3 disks sur mon serveur et que si il y en a un qui est absent ou autre ,le script se plante.
pourriez vous m'aider s'il vous plait ?
d'avance MERCI
le null (fabrice)
On Error Resume Next
'================================================================================================
'Constantes pour le réglage des alarmes surveillance disk
Const LimiteLecteurSysteme = 0.05 'décimales >> Le seuil d'alerte pour le disque systéme 0.05 = 5%
Const LimiteLecteurAutre = 0.04 'décimales >> Le seuil d'alerte pour les autres disques physiques (pas les netuse par exemple) 0.05 =5%
Const UnitDeSortie = "\\FRSP0204\production\Cmd-sys\travail\" '>> Unité de sortie avec path
Const UnitDeSortie1 = "\\FRSP0204\production\Cmd-exp\travail\" '>> Unité de sortie avec path pour CTRL
Const FichierDeSortie = "DiskInfo.txt" '>> Le fichier de log
Const FichierDeSortie1 = "Liste-Ctrl.txt" '>> Le fichier pour le CTRL
Const NomDeMachine = "FRSB0002" 'Mettre un . pour la machine locale
Const SurveilleDisk = 1 '>> Activer/Désactiver la surveillance des disques (1 ou 0)
Const Taux = 100
'================================================================================================
'Déclarations
Const ForAppending = 8
Const cdoSendUsingPort = 2
Const ForReading = 1
Const ForWriting = 2
Dim fso, f1, OutputLine
Dim ofso, fic, texte, fe
Set SC = New SpaceChecker
Set SC = Nothing
Citation :
|
[/quote][/quote]
Alarme = 0
Class SpaceChecker
Private Sub Class_Initialize()
Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & NomDeMachine & "\root\cimv2" )
Set colSettings = WMIService.ExecQuery ("Select * from Win32_ComputerSystem" )
For Each objComputer in colSettings
SystemName = objComputer.Name
Domain = objComputer.Domain
Next
Set colSettings = Nothing
Set fso = CreateObject("Scripting.FileSystemObject" )
'Set f1 = fso.CreateTextFile(FichierDeSortie, false)
'f1.close
Set f1 = fso.OpenTextFile(UnitDeSortie & SystemName & "_" & FichierDeSortie, ForAppending, true,0)
OutputLine = SystemName
If SurveilleDisk = 1 Then
Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & NomDeMachine & "\root\cimv2" )
Set colDisks = WMIService.ExecQuery("Select * from Win32_LogicalDisk" )
For each Disk in colDisks
If Disk.DriveType = 3 Then
If Lcase(Disk.DeviceID) = "D:" Then
LimiteLecteur = LimiteLecteurSysteme
Else
LimiteLecteur = LimiteLecteurAutre
End If
If (Disk.FreeSpace/Disk.Size) < LimiteLecteur Then
HddStatut="ALERTE - de (" & Taux*LimiteLecteur & "% Seuil d'alerte) "
Else
HddStatut="Normal + de (" & Taux*LimiteLecteur & "% Seuil d'alerte) "
End If
OutputLine = OutputLine & VbCrLf & VbCrLf & HddStatut & "Espace libre sur " & Disk.DeviceID & "/" & (Disk.FreeSpace/1000000) & " Mo Sur un total de " & (Disk.Size/1000000) & " Mo" & VbCrLf
End If
Next
End If
f1.writeline OutputLine
f1.Close
Set colDisks = Nothing
Set WMIService = Nothing
End Sub
End Class
'extrait la 1er ligne du fichier pour le CTRL
Set WshShell = WScript.CreateObject("WScript.Shell" )
Set ofso = CreateObject("Scripting.FileSystemObject" )
Set fic = ofso.OpenTextFile(UnitDeSortie & NomDeMachine & "_" & FichierDeSortie,1)
Set fe = ofso.OpenTextFile(UnitDeSortie1 & FichierDeSortie1,ForAppending,ForWriting,true)
fe.write(fic.ReadLine & vbCrLf)
fe.Close
Marsh Posté le 27-02-2020 à 10:46:00
Tu as creusé loin la, 11 ans
Tu devrais plutôt te créer un topic tout neuf rien qu'à toi, pas grand monde va lire un topic résolu je pense
Marsh Posté le 08-08-2008 à 11:05:29
Bonjour,
Apres avoir chercher sur le net je m'adresse à vous, et en plus je ne sais pas trop comment diriger ma rechercher sur mon ami google.
J'aimerai savoir si quelqu'un connait un script qui enverrai un message quand mon disque sur mon server atteind les 90% par ex..
Merci pour vos réponses
Message édité par kenji_lol le 29-08-2008 à 14:18:16