[VBS] "Parser un fichier" recherche chaine de caracteres

PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009 - 10 juil. 2006 à 17:17
PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009 - 11 juil. 2006 à 14:46
Bonjour à tous,

Je dois faire une "appli" (ou un script) qui soit capable d'effectuer une réservation d'adresse IP dans le DHCP (Microsoft Windows 2003 Server).

La ligne de commande ci-dessous permet de réserver une adresse IP :

NETSH DHCP SERVER \\SERVEUR SCOPE ww.xx.yy.zz ADD RESERVEDIP AdresseIP AdresseMAC NomReservation Description

Le problème, c'est que je ne veux pas préciser moi-même l'AdresseIP à réserver.
Mais je souhaite que mon "appli" (ou mon script) détecte automatiquement la 1ère adresse IP disponible (non encore réservée).

Voici le résultat de la commande "NETSH dhcp server scope Etendue show reservedip" qui permet de lister l'ensemble des adresses IP déjà réservées :

Le contexte de multi-etendue en cours a change pour la multi-etendue 10.56.0.0.

==================================
Adresse reservation - ID unique
==================================

10.56.30.6 - 00-06-1b-d1-69-4e-
10.56.30.0 - 00-02-e3-52-f8-45-
10.56.30.1 - 00-14-38-0a-f7-e6-
10.56.30.3 - 00-0d-9d-d0-12-03-

Je redirige le résultat de cette commande dans le fichier "result_show_reservedip.txt".

A l'aide d'une boucle, je vais tester tout d'abord si la premiere Adresse IP de mon étendue est déjà réservée dans le DHCP.

SI l'adresse IP est déjà présente dans le fichier TEXTE, ALORS je teste l'adresse IP suivante.

SI l'adresse IP n'est pas présente dans le fichier TEXTE, ALORS je peux réserver cette adresse IP (en utilisant NETSH DHCP SERVER \\SERVEUR SCOPE ww.xx.yy.zz ADD RESERVEDIP AdresseIP AdresseMAC NomReservation Description)

Voici mon code :

-----------------------



Dim IPCentre, IP
Dim x, y
Dim FSO,Ftxt
Dim Chaine
Dim fichier_lecture

IPCentre = "10.56"
fichier_lecture = "result_show_reservedip.txt"

' ----- global obj instanciation

Set FSO = CreateObject("Scripting.FileSystemObject")

' ----- main prog

' Permet de générer les adresses IP possibles de 30.2 à 49.254
' (on ne distribue pas les adresses qui se terminent par 0, 1 et 255)

For x = 30 To 31
     
       For y = 2 To 254

' Affichage de l'adresse IP complète 10.56.x.y
' (de 10.56.30.2 à 10.56.49.254)

IP = IPCentre & "." & x & "." & y

wscript.echo IP

' on parcourt chaque ligne du fichier texte

Set Ftxt = FSO.OpenTextFile(fichier_lecture, 1, true)

Do Until Ftxt.AtEndOfStream = true

      Chaine = Ftxt.Readline()
     
      If InStr(1, Chaine, IP) > 1 Then
         wscript.echo "L'adresse IP" & IP & "est déjà utilisée"
      End if

Loop
     
Ftxt.Close

Next
Next


----------------

QUESTION : comment "détecter" que l'adresse IP est disponible (pas encore réservée).

Actuellement, même lorsque l'adresse IP disponible est trouvée, le script continue de chercher si d'autres adresses IP sont disponibles, ce que je ne souhaite pas bien evidemment.

Dès que l'adresse IP dispo est trouvée, je souhaite lancer une commande du type :

objWshShell.run "NETSH DHCP SERVER \\SERVEUR SCOPE ww.xx.yy.zz ADD RESERVEDIP AdresseIP AdresseMAC NomReservation Description", 0, True

Merci de votre aide.<!-- / message --><!-- attachments -->

3 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
11 juil. 2006 à 07:24
 Bonjour,

Désolé, je n'ai pas répondu à ton précédent post.
Par contre, il n'est pas nécessaire de poster la même question x fois !!!!
infomsg_VBS-COMPARAISON-FICHIERS-LIGNE-LIGNE_774801.aspx est tjrs open.
Avec la synthaxe
Do Until Ftxt.AtEndOfStream = true

      Chaine = Ftxt.Readline()
je ne suis pas certain de l'open et read du fichier .txt
J'ai essayé avec un Do While et même erreur (objet requis).

jean-marc
0
AdilELHASSOUNI Messages postés 145 Date d'inscription vendredi 11 janvier 2002 Statut Membre Dernière intervention 19 juin 2007 1
11 juil. 2006 à 10:05
Salut
Je crois (si j'ai bien compris le probleme) que tu dois changer un peu de logique et utiliser une variable booleenne permettant de verifier si la valeur à recherchée  a été trouvée. Et pour ceci Essaye.

Touvee = Flase
Do Until Ftxt.AtEndOfStream = true

      Chaine = Ftxt.Readline()
     
      If InStr(1, Chaine, IP) > 1 Then
         trouvee  = true         
      End if

Loop
if trouvee then
    wscript.echo "L'adresse IP" & IP & "est déjà utilisée"
else
   ' le code que tu aime executer dans le cas ou l'IP n'existe pas
endif

Bonne chance
0
PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009
11 juil. 2006 à 14:46
C'est bon, je suis (enfin) parvenu à écrire ce script qui détermine la 1ère adresse IP disponible (non encore réservée) dans le DHCP.

Option Explicit
' ----- var and const


Dim IPCentre, IP, IPdispo, IPtrouvee
Dim x, y
Dim FSO,Ftxt
Dim Chaine
Dim fichier_lecture
Dim used


IPCentre = "10.192"
IPtrouvee = "NON"
fichier_lecture = "result_show_reservedip.txt"


' ----- global obj instanciation


Set FSO = CreateObject("Scripting.FileSystemObject")


' ----- main prog


' Permet de générer les adresses IP possibles de 30.2 à 49.254
' (on ne distribue pas les adresses qui se terminent par 0, 1 et 255)


For x = 30 To 31


If IPtrouvee = "OUI" Then
Exit For
End If


      For y = 2 To 254


' Affichage de l'adresse IP complète 10.56.x.y
' (de 10.192.30.2 à 10.192.49.254)
' wscript.echo IPCentre & "." & x & "." & y


IP = IPCentre & "." & x & "." & y
'wscript.echo IP


' on parcourt chaque ligne du fichier texte


Set Ftxt = FSO.OpenTextFile(fichier_lecture, 1, true)


used = false


Do Until Ftxt.AtEndOfStream true OR used true


      Chaine = Ftxt.Readline()
     
      If InStr(1, Chaine, IP) > 1 Then
       wscript.echo "L'adresse IP " & IP & " est déjà utilisée"
       used = true
      End if
Loop
           
Ftxt.Close


If used = false Then
   IPtrouvee = "OUI"
   IPdispo = IP
   Exit For
End If


'Set Ftxt = nothing
'Set FSO = nothing         


 Next
Next


wscript.echo "L'adresse IP " & IPdispo & " est DISPO !  Il temps désormais de réserver cette adresse IP dans le DHCP !"
0
Rejoignez-nous