extinction de postes sur le réseau

extinction de postes sur le réseau - Shell/Batch - Programmation

Marsh Posté le 09-06-2006 à 15:11:53    

Bonjour,
 
J'ai crééun batch qui me permet d'éteindre les postes allumés sur le réseau.
Pour cela, le batch sonde tous les ordis du réseau et applique la commande psshutdown (issu des Pstools).
Seulement, j'aimerais exclure de la liste des ordis à éteindre trois postes nommés srv_ppal, serveur2 et comptalinux....
seulement, je n'arrive pas à fonctionner le batch. le problème se situe au niveau de la condition if inclue ds une boucle...
si qqn peut m'aider à le résoudre...
 
voici le batch:

Code :
  1. @echo off
  2. title affichage de la liste des PC connect,s
  3. NET VIEW > listePC
  4. FOR /F "skip=3 eol=L" %%a IN (listePC) DO (if not %%a in (STATLINUX, SRV_PRINCIPAL, ServeurNT1) psshutdown -s %%a)
  5. del listePC
  6. pause


 
merci!!!
 

Reply

Marsh Posté le 09-06-2006 à 15:11:53   

Reply

Marsh Posté le 09-06-2006 à 15:30:01    

if %%a in (...)
 
n'est pas la bonne syntaxe.
 
Tu dois faire des  
if [not] %%a ==
pour tester chaque cas.

Reply

Marsh Posté le 09-06-2006 à 16:13:20    

comment ça, ce n'est pas bonne syntaxe?
pourtant qqch comme
if %username% in (dupont, dupond)...marche...
tu veux dire que ça ne fonctionne pas au sein d'une boucle?
 
:(
 
comment dois-je m'y prendre?
 
Dois-je écrire ceci:
FOR /F "skip=3 eol=L" %%a IN (listePC) DO (
if not %%a == STATLINUX psshutdown -s %%a
if not %%a == SRV_PRINCIPAL psshutdown -s %%a
if not %%a == SERVEURNT1 psshutdown -s %%a
)
 
???
 
 
 

Reply

Marsh Posté le 09-06-2006 à 16:19:48    

baobazz a écrit :

pourtant qqch comme
if %username% in (dupont, dupond)...marche...


Peut-être :D Parce que tu es sous W2k. Sous XP, je n'ai que ça :

Code :
  1. IF [NOT] ERRORLEVEL number command
  2. IF [NOT] string1==string2 command
  3. IF [NOT] EXIST filename command
  4. ....
  5. If Command Extensions are enabled IF changes as follows:
  6.     IF [/I] string1 compare-op string2 command
  7.     IF CMDEXTVERSION number command
  8.     IF DEFINED variable command
  9. where compare-op may be one of:
  10.     EQU - equal
  11.     NEQ - not equal
  12.     LSS - less than
  13.     LEQ - less than or equal
  14.     GTR - greater than
  15.     GEQ - greater than or equal


 
Sinon, ta nouvelle version devrait marcher.

Reply

Marsh Posté le 09-06-2006 à 16:35:31    

sinon tu nas pas une petite idée pour faire fonctionner mon batch?
;)

Reply

Marsh Posté le 09-06-2006 à 16:38:17    

Euh, j'y avais répondu non ? Deux fois même :D

Reply

Marsh Posté le 09-06-2006 à 17:05:53    

heu...désolé!
en effet: je sui un peu étourdi.
 :)  

Reply

Marsh Posté le 09-06-2006 à 17:15:07    

reugneugneu!!!
 :fou:  
 :??:  :)  
 
marche tjs pas...
jeffectue des tests avec echo, c plus prudent! :pt1cable:  
 
keski foire ds mon code?
 

Code :
  1. @echo off
  2. rem @echo off
  3. rem NET VIEW > \listePC.txt
  4. rem FOR /F "skip=3 eol=L" %%a IN (c:\listePC.txt) DO echo %%a
  5. rem pause
  6. @echo off
  7. title affichage de la liste des PC connect,s
  8. NET VIEW > listePC
  9. FOR /F "skip=3 eol=L" %%a IN (listePC) DO
  10. (
  11. if not %%a == STATLINUX echo %%a
  12. if not %%a == SRV_PRINCIPAL echo %%a
  13. if not %%a == SERVEURNT1 echo %%a
  14. )
  15. del listePC
  16. pause

Reply

Marsh Posté le 10-06-2006 à 08:24:23    

Effectivement cette commande ne peut pas fonctionner pour SRV_PRINCIPAL et  SERVEURNT1 puisque dès la première ligne l'opération est déjà lancée.  
 
FOR /F "skip=3 eol=L" %%a IN (listePC) DO (
       if not %%a == STATLINUX echo %%a
              if not %%a == SRV_PRINCIPAL echo %%a
                       if not %%a == SERVEURNT1 echo %%a
)
 
En fait, il faut imbriquer les conditions entre elles pour que cela fonctionne.  
(à la place de "if not %%a ==" je préfère utiliser "if %%a neq" )
 
FOR /F "skip=3 eol=L" %%a IN (listePC) DO (
        if %%a neq STATLINUX (
               if %%a neq SRV_PRINCIPAL (
                       if %%a neq SERVEURNT1 (
                       echo %%a
                       psshutdown -s %%a  
                       )
               )
        )
)
 
ATTENTION à respecter la syntaxe et la place des paranthèses dans ce genre de commandes !

Reply

Marsh Posté le 10-06-2006 à 12:56:44    

Euh, pourquoi eol=L ?

Reply

Marsh Posté le 10-06-2006 à 12:56:44   

Reply

Marsh Posté le 12-06-2006 à 10:04:31    

merci, c parfait, pascale.
Par contre, pour ceux que ce batch intéresserait, juste un détail, il faut écrire:
if %%a neq \\STATLINUX (  
ne pas oublier las anti-slashes.
pascale, tu as tout à fait répondu à ma question!
 
Maintenant, pour répondre à nglechau, le résultat de net view donne en fin de ligne le message
"La commande s'est terminée correctement"
Or, on ne souhaite pas que ce message soit pris en compte dans la liste des PCs.
Donc on spécifie le "L" de "La commande [...]" comme caractère de fin de ligne!
 
voili voilou!
 
;)

Reply

Marsh Posté le 12-06-2006 à 13:16:13    

C'est-à-dire il n'y a aucun poste sur le réseau dont le nom contient un L ? ;)
 
Sinon, merci pour info, étant donné que je ne connaisais pas la sortie de la commande en fr :D


Message édité par wackevat le 12-06-2006 à 13:17:37
Reply

Marsh Posté le 12-06-2006 à 15:24:32    

ben en fait, ds la résultat, ls postes sont précédés de deux anti-slashes:
\\
donc en fait, il n'y a aucune ligne concernant les postes qui ne commence par un "L"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed