Script Dos extinction Pc allumés depuis liste passée en paramètre - Shell/Batch - Programmation
Marsh Posté le 18-06-2004 à 16:22:12
Un bon site en anglais :
http://www.robvanderwoude.com/index.html
pas d'idée pour le reste.
A+
Marsh Posté le 21-06-2004 à 16:38:35
Pq le pb c'est que j'ai 500 machine a atteindre et assez rapidement.
Et le shutdown a un timeout assez élévé (anviron 50 secondes) si la machine est déja éteinte. Ce qui ralentit énormément mon script.
Si vous avez d'autres idées de script ou si vous savez s'il est possible de diminuer le timeout du shutdown...
Marsh Posté le 22-06-2004 à 09:43:30
j'ai pas le temps de tester, mais essaie dans cette voie :
il faut 2 fichiers batch
dans le 1° :
for /f %i in fichier do call test2.bat %i
dans test2.bat :
ping %1|find "dépassé"
if errorlevel 1 goto fin
shutdown ..... \\%1
:fin
attention dans le 2° batch, c'est %1 et pas %i
A+
JPA
Marsh Posté le 22-06-2004 à 09:46:25
pour faire une seule fois le test du ping et gagner ainsi 9 secondes par machine éteinte :
ping -n 1 %1|find "dépassé"
Marsh Posté le 22-06-2004 à 11:13:56
en plus de la solution proposée par JPA
à la place du call, il est possible d'utiliser 'start /b', qui n'attend pas le retour de la commande appellée pour passer à la suivante, (contrairement à call je crois).
-> ça revient à lancer un mass shutdown en parallèle
je propose ça, mais tu n'as pas précisé l'environnement et les conditions d'éxécution.
a+
Marsh Posté le 22-06-2004 à 11:18:54
petite correction d'erreur :
if not errorlevel 1 goto fin
find a trouvé le mot "dépassé" dans la réponse du ping -> machine éteinte
Marsh Posté le 22-06-2004 à 18:55:42
merci JPA, je vais prendre cetyte méthode, mais tu peux le faire en un seul batch (sous NT)
for /f %i in fichier do (ping %i|find "dépassé"
if errorlevel 1 goto fin
shutdown ..... \\%i
:fin )
Marsh Posté le 23-06-2004 à 08:11:30
C'est vrai que j'ai gardé des habitudes d'avant guerre (du golfe)...
Marsh Posté le 23-06-2004 à 15:41:10
La version définitive si ça peut intéresser qqu'1!!!
Par contre j'ai pas trouvé de moyen de faire 2 actions dans le "IF", obligé de le répeter 2 fois.
Si qqu'1 sais?
@echo off
cls
for /F %%i IN (d:\test\MACHINE2.txt) DO (PING -n 2 -w 4 %%i | FIND "TTL=">NUL
IF NOT ERRORLEVEL 1 (shutdown -r -f -t 60 -m \\%%i) else (Echo machine %%i deja eteinte >> d:\test\result.txt)
IF NOT ERRORLEVEL 1 (echo machine %%i maintenant eteinte >> d:\test\result.txt)
)
Marsh Posté le 12-04-2005 à 21:49:08
Un drapal pour quoi ?
Si c'est le pb de deux commandes pour le if :
Code :
|
Marsh Posté le 18-04-2005 à 17:11:20
la commande shutdown est pas reconnu chez moi, et sinon, j'ai reussit avec :
Code :
|
et la je suis au cyber et ca ne marche pas, il me dit : erreur lors de l'ouverture du terminal serveur sur poste08
pourtant cette commande marhait chez un pot hier avec 2 portables ( un win 200serveur et un XP )
ici au cyber ( un win2000serveur et des 2000 )
Marsh Posté le 21-04-2005 à 09:41:08
En fait, sous windows 2000 serveur, la commande shutdown n'existe pas, j'ai donc essayer avec tsshutdn mais ca me dit que le service terminal serveur etc etc ...
Or la je suis sous xp sur mon portable et je tente donc de lancer le script pour éteindre le PC (xp) d'un pot juste a coté, il est bien pingé mais la comande shutdown -s -m \\%1%
n'éteind pas le PC, ca me dit "le chemin réseau n'a pas été trouvé", pourtant le PC est bien pingé !
Besoin d'aide !
Marsh Posté le 13-10-2005 à 14:16:49
voilà ce que je cherchais!
en revanche chez moi ca déconne !
j'ai mis ça dans mon .bat:
for /F %%i IN (c:\liste2.txt) DO (
PING -n 1 -w 5 %%i | FIND "TTL=">NUL
IF NOT ERRORLEVEL 1 (
@echo %%i allumé
) else (
@echo %%i éteint
)
)
bon j'ai juste mis un echo pour le moment mais c pas ca que je veux faire je vous rassure! lol
par contre qd je lance ce batch j'ai "ce processus a tenté d'écrire sur un canal inexistant" qui s'affiche des centaines de fois à l'écran avant que la fenetre DOs se ferme completement !!! qqn voit ce qui peut déconner ??
merci
@+
Marsh Posté le 13-10-2005 à 14:17:47
pour etre sur... dans votre fichier .txt vous avez simplement un nom de poste par ligne et rien d'autre ??!!
Marsh Posté le 13-10-2005 à 15:48:36
Ton script marche chez moi.
Chaque ligne du fichier .txt contient uniquement le nom d'une machine.
Vérifie ta variable PATH ou ajoute :
set PATH=%SystemRoot%;%SystemRoot%\system32
au début de ton script pour être sûr que la bonne version de chaque commande est exécutée.
Marsh Posté le 13-10-2005 à 15:56:19
wackevat a écrit : au début de ton script pour être sûr que la bonne version de chaque commande est exécutée. |
y'a des fois ou j'ai envie d'ouvrir la fenetre ... et de sauter !
j'ai changé le nom de mon .bat et ca marche !
il s'appelait ping.bat !!!
désolé de vous avoir dérangé betement !!!
Marsh Posté le 18-06-2004 à 11:23:04
Salut à tous,
je cheche à faire un script qui va éteindre toutes les machines allumées (nom de machine contenu dans un fichier texte passé en entrée).
Jusque la aucun pb (for /F %i IN (fichier contenant les noms de machines du réseau.txt) do shutdown.EXE -s -f -t 10 -m \\%i).
Mais cette méthode est un peu "bourrine"
Je voudrais pinger les machines et éteindre celle qui répondent.
Sinon si vous connaissez un bon site sur la programmation en script dos, je suis preneur.