Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
script simple avec psexec netsh \\ urgent :s
Auteur Message
Répondre en citant
Message script simple avec psexec netsh \\ urgent :s 
Bonjour,

J'ai un simple script à réalisé, mais n'ayant jamais fait de script batch, je ne sais d'où peut venir mon erreur:

Code:
@echo off
for /l %%I in (1,1,254) do (
ping 192.168.209.%%I | FIND "TTL="
if errorlevel 0 psexec \\192.168.209.%%I ipconfig>"C:\tests\%%I.txt"
(
if errorlevel 1 echo le pc avec l adresse ip 192.168.209.%%I existe bien mais n'est pas dans le domaine>>"C:\tests\ping.txt"
))


Donc ce script je ping toutes les adresse du réseau 192.168.209.0. Si le ping marche, il effectue un psexec qui va chercher l'ipconfig et va le stocker dans un fichier texte, et si il n'arrive pas il va écrire dans le fichier ping.txt que le pc ping mais n'est pas dans le domaine.

D'abord je voulais savoir si mon code était syntaxiquement correct, car dès la première adresse, le ping ne passant pas, il effectue quand même le psexec, alors qu'il ne devrait pas.

merci de votre aide!



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message script simple avec psexec netsh \\ urgent :s 
Alors voici l'avancement de mon script avec toujours quelques petits problèmes ..


Code:
@echo off
for /l %%I in (1,1,254) do (
set compteur=1
if exist "C:\tests\ping.txt" ( del c:\tests\ping.txt)
ping -n 2 192.168.209.%%I>"c:\tests\ping.txt"
find "TTL=" C:\tests\ping.txt
if errorlevel 0 ( psexec \\192.168.209.%%I ipconfig>"C:\tests\%%I.txt"
set compteur=%errorlevel%
)
timeout /T 5 /NOBREAK
( if %compteur% NEQ 1 echo le pc avec l adresse ip 192.168.209.%%I existe bien mais n'est pas dans le domaine>>"C:\tests\ping.txt"
)
else echo le pc 192.168.209.%%I ne ping pas>>"C:\tests\pingpas.txt"
)




Répondre en citant
Message script simple avec psexec netsh \\ urgent :s 
Pour sûr, doit y'avoir plus court, mais vu que je ne connais pas les commandes de réseau local je vais juste améliorer ton code Smile


Déjà, veille à rendre ton code lisible, tu ouvres et tu fermes des parenthèses n'importe comment, et tu n'indentes pas ton texte.
Code:
@echo off
for /l %%I in (1,1,255) do (
   set compteur=1
   if exist "C:\tests\ping.txt" del c:\tests\ping.txt
   ping -n 2 192.168.209.%%I > c:\tests\ping.txt
   find "TTL=" C:\tests\ping.txt
   if errorlevel 0 (
      psexec \\192.168.209.%%I ipconfig>"C:\tests\%%I.txt"
      set compteur=%errorlevel%
   )
   timeout /T 5 /NOBREAK
   if %compteur% NEQ 1 (
      echo le pc avec l adresse ip 192.168.209.%%I existe bien mais n'est pas dans le domaine>>"C:\tests\ping.txt"
   ) else echo le pc 192.168.209.%%I ne ping pas>>"C:\tests\pingpas.txt"
)

Ensuite, tu peux utiliser les caractères de redirection pour utiliser moins de fichiers temporaires.
On note aussi que la variable Compteur ne sert à rien, vu qu'on peut directement réunir les If.
Vu que je ne vois pas l'utilité d'un Timeout (surtout pour un code qui n'affiche rien à l'écran, et qui doit être bien long avec tous les Ping), je l'enlève par la même occasion.
Code:
@echo off
for /l %%I in (1,1,255) do (
   if exist "C:\tests\ping.txt" del c:\tests\ping.txt
   ping -n 1 192.168.209.%%I | find "TTL=" C:\tests\ping.txt
   if errorlevel 0 (
      psexec \\192.168.209.%%I ipconfig>"C:\tests\%%I.txt"
      echo le pc avec l adresse ip 192.168.209.%%I existe bien mais n'est pas dans le domaine>>"C:\tests\ping.txt"
   ) else echo le pc 192.168.209.%%I ne ping pas>>"C:\tests\pingpas.txt"
)

Si j'en savais plus sur les usages ultérieurs de pingpas.txt et de ping.txt, et sur les centaines de fichiers %%i.txt créés, je pourrais éventuellement voir ce que je peux faire pour améliorer tout ça. Aussi, je me demandais, ce programme est censé détecter les ordinateurs connectés au réseau local ? Si c'est le cas, saches que les programmes en réseau local commencent pas 192.168, mais que les deux autres valeurs peuvent varier.
A noter que j'ai mis "255", car une IP va jusqu'à 255.

Cordialement,
ytrezAn




______________________________________________________
Skype
Répondre en citant
Message script simple avec psexec netsh \\ urgent :s 
Je te remercie, dans un premier temps, d'avoir pris le temps le temps de répondre, je t'explique rapidement pourquoi j'ai mis des parenthèses comme cela, misent autrement mon code ne marché pas ^^
ensuite le timeout permet de laisser le temps au psexec de s’exécuter, en général quelques secondes d'où le timeout de 5 secondes, ensuite pour la variable compteur elle me sert à récupérer le %errorlevel% du psexec, et comme j'ai du mettre un timeout sans la variable compteur il me prendre le %errorlevel% du timeout, mais effectivement si le timeout disparaît la variable compteur disparaît =) (je reverrai cela ce weekend)

Sinon je suis en pleine rédaction de mon rapport de stage, j'ai donc mis de coté le script afin de changer les postes d'ip, mais j'y replongerai lundi pour les deux semaines de stage me restant, et je te répondrai à ce moment là plus en détails à ton message, ayant demandé de l'aide sur plusieurs forums qui, jusqu'à maintenant, étaient sans réponses, je n'ai pas pris le temps ces derniers jours de vérifier si quelqu'un m'a répondu d'où l'envoie de mon message seulement maintenant ^^

J'essayerai d'être plus clair dans mon code ce weekend ou lundi au plus tard à très vite! Okay

PS: j'ai mis 254, car les premières et dernières de réseau sont réservé , donc jamais un poste n'aura 255 en fin d'ip, mais si je suis mon raisonnement j'aurai du également commencer par 2 ^^



Répondre en citant
Message script simple avec psexec netsh \\ urgent :s 
Avant d'aller plus loin j'ai un souci avec la variable "errorlevel"

prenons un exemple très simple:

Code:
@echo off
ping -n 1 192.168.209.1 | find "TTL="
if errorlevel  echo bonjour


le 192.168.209.1 ne se ping pas

donc si j’exécute le code précèdent avec 209.1 normalement le "errorlevel" me retourne 1, donc le if ne passerai pas, mais je ne comprends pas pourquoi mais le if passe et cela m'affiche bonjour...

j'ai fais un test en mettant "echo %errorlevel%" juste avant le if, ça m’affiche bien 1, car le ping ne passe pas mais le "errorlevel" passe quand même je ne comprends pas ..

Si quelqu'un pourrait m'aiguiller, Merci.



Répondre en citant
Message script simple avec psexec netsh \\ urgent :s 
Salut,

Tu n'as pas défini de valeur à errorlevel Wink

Code:
@echo off
ping -n 1 192.168.209.1 | find "TTL="
:: Il manque un zero (ou 1 ça dépend ce que tu veux faire !)
if errorlevel 0 echo bonjour


Au passage, tu as vu le temps que ça prend pour "pinguer" tout un réseau, même juste en classe C ? Mr. Green
Si j'étais toi, je prendrais un scanner Wink

@+




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Message script simple avec psexec netsh \\ urgent :s 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch