Fichier batch - Shell/Batch - Programmation
Marsh Posté le 13-12-2015 à 21:13:40
Déjà la question standard: Tu es obligé de faire ça en batch? C'est l'horreur ce truc, autant utiliser un language correct genre C ou un language script genre Perl.
Tes ordis ils tournent sous quel(s) OS?
Pour voir à travers le réseau si un autre PC est allumé le ping c'est bien et facile à faire: Sur le serveur suffit de lancer la commande ping et au niveau des deux PC il n'y a rien à faire, ils répondent au ping par défaut. Par contre pour voir si tel ou tel programme est lancé c'est plus dur, à mon avis c'est la le point difficile, car je ne pense pas qu'il existe une commande toute faite pour ça (à travers le réseau bien entendu). Il faudrait (à mon avis) faire tourner un programme/script dédié sur chaqu'un des deux PC qui (le programme) devra écouter sur le réseau si on s'adresse à lui et répondre le cas échéant Ca m'a l'air bien compliqué, mais une petite recherche rapide retourne deux codes Perl très courts qui m'ont l'air très prometteurs. Reste la question si le Perl peut être utilisé et le(s) OS des machines.
edit: Corrige le titre de ton message, ta question n'a rien à voir avec Flash/ActionScript...
Marsh Posté le 19-12-2015 à 10:35:19
Bonjour
Désolé de na pas avoir répondu plus tôt, j'étais en déplacement. je suis rentré hier soir.
Les deux PC et le serveur sont sous Windows 10 Pro
Il existe peut être un langage plus simple, je sais pas je n'y connais rien.
Sur le fait de voir si tel ou tel programme est lancé, en fait le PC qui ferait office de serveur me sert aussi à regarder des films sur la TV.
Simplement, j'aimerais que si VLC ou autres programmes est lancé sur le serveur, il ne s’éteigne pas .
Dans le titre du message, je mets quoi alors?
Marsh Posté le 19-12-2015 à 17:29:56
Ok, je ne connais pas W10 mais je suppose que Perl tourne aussi là-dessus. Perl c'est bien, c'est libre et donc gratuit par contre c'est pas tout petit au niveau espace disque dur / nombre de fichiers. Sur un PC moderne ça ne devrait pas poser problème je pense. Personnellement j'utilise la distribution Strawberry Perl.
Je veux bien essayer de bricoler quelque chose à base des scripts dont je parlais, par contre je ne suis pas du tout un pro et je n'ai pas W10 pour tester ce qui ne facilite pas les choses (non, mon PC est trop ancien pour utiliser une VM)...
Pour le titre du message tu peux mettre [Shell/Batch] ou [Perl] si tu veux utiliser ça. Par contre tout ça pour quelqu'un qui n'y connait "absolument rien en programmation" le chemin peut-être long...
Marsh Posté le 19-12-2015 à 19:48:12
Merci a toi pour tes réponses.
Quand tu dis "c'est pas tout petit niveau espace disque dur" tu veux dire qu'il y'a une grosse installation à faire avant?
je voulais partir avec un fichier bath parce que ça ne prends pas bcp de place, pas d'installation à faire etc.
Sur le net j'avais trouvé en fouillant un bout de programme en batch, mais comme je n'y connais rien, j'ai pas pu l'adapter à mes besoins
Marsh Posté le 19-12-2015 à 20:05:30
L'installation n'est pas complexe mais effectivement il y a beaucoup de fichiers, mon dossier "strawberry" (avec quelque modules rajoutés plus tard) fait 376MB avec >14.000 fichiers... Effectivement le batch c'est beaucoup plus économe mais bien plus chiant à faire fonctionner. Pour le ping ça peut encore passer mais pour ton histoire de vérifier si tel ou tel programme tourne aucune chance. Après on peut certainement faire un truc bien petit (un seul petit exécutable) avec du C par exemple mais le C c'est beaucoup plus disons "basique" que le Perl, il faudrait certainement faire beaucoup plus de code (complexe) pour y arriver (moi je ne saurais pas faire).
Marsh Posté le 19-12-2015 à 20:16:16
ok pour la place. 376 MB ce n'est rien.
pour le fait de vérifier un programme tourne, on est bien d'accord, je veux simplement vérifier si par exemple vlc n'est pas lancé sur le serveur lui même, pas sur une autre machine. Tu penses que ça pourrait être plus simple du coup? lol
Marsh Posté le 19-12-2015 à 23:04:33
Attends, tu dis que tu veux vérifier par un programme sur le serveur que tel ou tel programme ne tourne pas sur le serveur aussi? C'est quoi alors cette histoire de réseau, j'ai mal compris?
Si c'est ok pour utiliser du Perl ça me paraît tout à fait faisable, surtout sans cette histoire de réseau.
Marsh Posté le 20-12-2015 à 11:03:28
Bonjour. je récapitule lol
je voudrait simplment que le serveur ping les deux autres PC afin de voir si ils sont allumés ou éteins. Si ils sont éteints, alors le serveur peux lui se mettre en veille prolongée. Si il y en a un des deux allumé alors, il reste allumé, et recommencera le ping 15 minutes après.
Enfin, le serveur me sert aussi à regarder des films en bluray sur ma TV.
J'aimerais simplement qu'il ne se coupe pas si je suis en train de regarder des films avec, et cela, même si les deux autres PC sont éteins.
Marsh Posté le 20-12-2015 à 13:02:08
il y a aucun, mais alors aucun intérêt à utiliser perl pour ce genre de besoin surtout sur un environnement windows...
un script PowerShell que tu mets en tache planifiée suffit largement.
Marsh Posté le 20-12-2015 à 13:28:18
Bonjour Je@nb
tu saurais me faire ce script ou pas?
Bien évidemment, j'aimerais aussi avoir des explications sur ce que veux dire chaque ligne
Marsh Posté le 20-12-2015 à 13:40:51
Je@nb a écrit : il y a aucun, mais alors aucun intérêt à utiliser perl pour ce genre de besoin surtout sur un environnement windows.. |
Si: C'est un language avec lequel je peux me débrouiller. Après si tu connais le PowerShell effectivement ca doit être mieux car plus léger...
Marsh Posté le 20-12-2015 à 15:59:09
j'ai trouvé ça sur le net .
Vous en pensez quoi? moi je ne comprends rien
#!/bin/sh
echo 'Debut du programme'
Domaine='172.128.1.'
Eteindre_PC=true
#lancer la commande pour vérifier si VLC est lance
ps -e | grep vlc | grep -v grep
#Récuperer le resultat
if [ ! $? -eq 0 ]
then
#lancer la commande pour vérifier si totem est lance
ps -e | grep totem | grep -v grep
#Récuperer le resultat
if [ ! $? -eq 0 ]
then
#Parcourir une plage d'adresse IP
for Valeur_ip in `seq 2 20`;
do
#Ping une adresse IP
ping -q -c5 $Domaine$Valeur_ip > /dev/null
#Récuperer le resultat
if [ $? -eq 0 ]
then
#Ne pas eteindre
Eteindre_PC=false
fi
done
else
Eteindre_PC=false
fi
else
Eteindre_PC=false
fi
#Eteindre le serveur si aucun PC sur le réseau
if [ $Eteindre_PC == true ]
then
shutdown -h now
fi
echo 'Fin du programme'
Marsh Posté le 20-12-2015 à 17:30:22
Ca c'est un truc pour je ne sais quelle console Linux, ça ne marchera pas sous Windows.
Marsh Posté le 20-12-2015 à 19:23:56
En perl, un truc dans ce gout la devrait faire l'affaire:
Code :
|
A+,
Marsh Posté le 20-12-2015 à 19:28:13
typo, ligne 14 c'est certainement $program2
Marsh Posté le 20-12-2015 à 19:34:17
En powershell détaillé:
Code :
|
Marsh Posté le 20-12-2015 à 19:36:41
Pour le programme pas lancé j'ai pas fait mais c'est easy aussi.
C'est quoi la condition : si aucun pc répond et si cette liste de programme n'est pas lancé alors on hiberne ?
Marsh Posté le 20-12-2015 à 19:54:27
merci à tous de vous pencher sur le problème
Je@nb oui on hiberne si les deux PC ne répondent pas au ping, et si VLC n'est pas lancé.
J'aimerais aussi qu'on m'explique comment faire si je veux rajouter un programme dans la condition
Marsh Posté le 20-12-2015 à 19:56:24
rat de combat a écrit : typo, ligne 14 c'est certainement $program2 |
Corrigé et mis un code alternatif pour un hibernate plutot que shutdown
A+,
Marsh Posté le 20-12-2015 à 20:00:53
Code :
|
Tu changes les IP ou tu en rajoutes, séparé par des virgules
Pour les programmes, pareil, tu met "program1","program2","program3"...) séparé par des virgules
Marsh Posté le 21-12-2015 à 14:19:45
Merci Je@nb.
Par contre comment lui il reconnais le programme? il faut pas que je mette vlc.exe ou si je veux rajouter une application, je ne doit pas mettre le vrai nom exact du .exe?
Pour mettre en place tout ça, il faut simplement que je colle ça dans un fichier bloc note et que j'enregistre ça en .bat?
Marsh Posté le 21-12-2015 à 14:21:44
Ensuite j'aimerais répéter ce code toutes les 15 minutes. je peux faire ça comment? on peux le mettre directement dans le code?
Marsh Posté le 21-12-2015 à 16:04:54
Il faut mettre le nom de l'exe sans .exe .
Genre winword pour word, excel pour Excel etc.
Oui copie colle ça (sans les numéro de lignes, faut double cliquer sur le code pour les faire disparaitre) et enregistre en .ps1
Pour le répéter toutes les 15 minutes, lance le depuis le planificateur de taches
Marsh Posté le 21-12-2015 à 18:47:51
Merci Je@nb
J'ai mis tout ça en place le script à l'air de fonctionner SAUF :
Les deux PC étaient allumés, vlc n'était pas en marche. J'ai exécuté le script avec power shell, et le PC s'est quand mis en hibernation
Normalement il aurait du rester allumé, vu que les deux autres le sont.
Comment je peux modifier ça?
En fait il faut que le PC ping les deux. Si un des deux ou les deux répondent, alors, il reste allumé.
Si aucuns des deux PC ne répond, alors il regarde si aucun programmes dans la liste n'est lancé.
Si un programme dans la liste est lancé, alors il recommence depuis les début du script (ping des deux PC)
Si aucuns des programmes de la liste n'est lancé, alors il peut se mettre en hibernation.
Tu vois ce que je veux dire Je@nb
En tout cas je tiens d'abord à te remercier pour ce premier script
Marsh Posté le 21-12-2015 à 19:20:58
Autant pour moi
Le script fonctionne parfaitement, c'est moi qui ai fait une erreur.
Par contre j'ai un autre problème
Ler script fonctionne uniquement lorsqu'il est ouvert dans la console powershell.
Mais en tant que tache planifiée, ça ne marche pas.
Lorsque je fais clic droit sur le script, puis executer avec powershell, la console s'ouvre, mais rien ne se passe. L'écran de la console reste bleu.
Tu aurais une solution?
Marsh Posté le 21-12-2015 à 21:29:21
Bizarre.
Le script attends qq secondes que le ping passe ou pas. (j'ai pas en tête mais c'est plusieurs essai de ping)
Sinon j'ai mis return au lieu de break, ça améliore les perfs mais bon c'est pas important et on voit pas la fin
tu peux réessayer ?
Code :
|
Marsh Posté le 21-12-2015 à 21:57:14
Le script est plus rapide oui.
Il fonctionne très bien encore merci.
Mais j'ai l'impression que la tâche planifiée ne fonctionne pas.
En effet, comme je fait démarrer/executer et que je colle C:\extinction.ps1, ça m'ouvre le script sous le bloc note au lieu de l'éxécuter.
?
Marsh Posté le 21-12-2015 à 22:05:24
lance plutôt powershell.exe -ExecutionPolicy Bypass -File c:\extinction.ps1
Marsh Posté le 21-12-2015 à 22:09:49
alors
lorsque je lance la taches planifiée avec ça rien ne se passe
Par contre lorsque je lance via démarrer executer, j'ai bien la console qui se lance avec le script
Marsh Posté le 22-12-2015 à 11:03:34
Salut Je@nb
C'est bon, j'ai réussi à mettre la tâche planifiée correctement.
Tout fonctionne parfaitement.
Tu es un génie!!!
Je te remercie grandement pour ce script
Marsh Posté le 13-12-2015 à 20:43:29
Bonsoir à tous
Je me permet de venir ici vous demander de l'aide car je n'y connais absolument rien en programmation.
J'ai cherché pas mal de chose sur le net, mais je ne comprends rien.
Je vous explique : J'ai un PC à la maison qui fait office de "serveur" de stockage.
Je possède à côté deux autres PC
J'aimerais trouver un fichier.bat qui me permettrais de mettre en veille prolongée ou hibernation le serveur si aucuns des deux autres PC n'est allumé, ou si tel ou tel programme n'est pas lancé sur le serveur.
J'ai ma petite idée, mais je ne sais pas comme m'y prendre.
Je pense qu'il faudrait que le serveur ping les 2 PC toutes les 10 minutes. Si aucuns paquets n'est transmis avec succès, alors le PC serveur peut se mettre en veille prolongée. Dans le cas contraire, il retente dans 10 minutes.
J'aimerais également, qu'il regarde si tel ou tel programme n'est pas lancé. J'aimerais aussi qu'il vérifie ça toutes les 10 minutes
J'espère que j'ai assez bien expliqué ma demande.
Merci d'avance pour votre aide
Message édité par Dream0386 le 19-12-2015 à 19:44:20