IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Affectation d'une adresse IP statique


Sujet :

VBScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 38
    Par défaut Affectation d'une adresse IP statique
    Bonjour,

    Je souhaite automatiser la bascule entre DHCP et adresse IP statique pour une carte réseau bien pécise. À cette fin j'ai écrit le script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    NICName = "Realtek PCIe GbE Family Controller" 
    ipaddr = Array("192.168.1.200") 
    subnet = Array("255.255.255.0")
     
    Set NICs = GetObject("winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")
     
    For Each NIC in NICs
        If NIC.Description = NICName Then 
    		If NIC.DHCPEnabled Then
    			NIC.ReleaseDHCPLease()
    			on error resume next
    '			If NIC.IsWriteLocked Then
    '				NIC.ReleaseWriteLock
    '			End If
    			ret = NIC.EnableStatic(ipaddr, subnet)
    			msg = "code retour = " & ret & vbcrlf & "DHCP désactivé" & vbcrlf & "Adresse IP statique : " & NIC.IPAddress(0)
    		Else
    			ret = NIC.EnableDHCP
    			NIC.RenewDHCPLease()
    			msg = "code retour = " & ret & vbcrlf & "DHCP activé" & "Adresse IP dynamique : " & NIC.IPAddress(0)
    		End If
    		Exit For
       End If
    Next
    msgbox msg
    Le ReleaseDHCPLease fonctionne mais pas le EnableStatic. J'obtiens un code retour d'une valeur négative astronomique (-2147217405) mais rien ne bouge. En parcourant la toile j'ai lu qu'il fallait lever un éventuel vérou. Cela ne change rien d'où la mise en commentaire de ce bout de code.

    Je n'ai pas encore testé l'alternative, le passage en DHCP, car j'aimerais d'abord, si c'est possible, résoudre le problème du passage en adresse statique.

    Vos suggestions sont les bienvenues et je vous en remercie par avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 437
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 437
    Par défaut
    D'après ce que je lis, tu n'as pas forcément besoin de relâcher l'adresse IP acquise en DHCP, tu peux directement activer l'adressage statique.
    Donc si tu commentes le NIC.ReleaseDHCPLease(), que se passe-t-il?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 38
    Par défaut
    Bonjour umfred et merci de t'interesser à mon problème.

    que se passe-t-il
    Kif-kif. J'ai ajouté le release dans un 2e temps en passant que c'était peut-être nécessaire mais ça ne change rien. Si ce n'est qu'un ipconfig montre que le release fonctionne puisque l'adresse IP est devenue une adresse APIPA.
    Toutefois le message du script affiche toujours l'adresse IP de départ.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 437
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 437
    Par défaut
    J'avais un présentiment, qui est confirmé par la réponse de jurassic pork en 2011 https://www.developpez.net/forums/d1...c/#post6113490
    problème de droits, il faut lancer "en tant qu'administrateur"

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 38
    Par défaut
    Ceci m'avait affleuré l'esprit mais dans la mesure où le release passait je n'y croyais pas trop. Il n'est pas possible de lancer un script vbs en tant qu'administrateur par un simple clic. Il faut passer par la méthode du déclenchement à deux étages.

    Voici donc le script modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    ' Initialisation variables
    '-------------------------
    NICName = "Realtek PCIe GbE Family Controller" ' Remplacez par le nom de la carte réseau
    ipaddr = Array("192.168.1.200") 'Remplacer par l'adresse IP à affecter
    subnet = Array("255.255.255.0")
     
    'Le script se relance lui-même en mode administrateur
    '-----------------------------------------------------
    If WScript.Arguments.length = 0 Then
    	Set monShell = CreateObject("Shell.Application")
    	monShell.ShellExecute "wscript.exe", Chr(34)& WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
    Else 
     
    ' À la relance
    '-------------
    	Set NICs = GetObject("winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")
    	For Each NIC in NICs
    		If NIC.Description = NICName Then 
    			If NIC.DHCPEnabled Then
    				NIC.ReleaseDHCPLease()
    				ret = NIC.EnableStatic(ipaddr, subnet)
    				msg = "code retour = " & ret & vbcrlf & "DHCP désactivé" & vbcrlf & "Adresse IP statique : " & NIC.IPAddress(0)
    			Else
    				ret = NIC.EnableDHCP
    				NIC.RenewDHCPLease()
    				msg = "code retour = " & ret & vbcrlf & "DHCP activé" & vbcrlf & "Adresse IP dynamique : " & NIC.IPAddress(0)
    			End If
    			Exit For
    		End If
    	Next
    	msgbox msg
    End If
    Tout semble maintenant fonctionner sauf l'affichage de l'adresse IP. Il y a systématiquement un coup de retard. C'est toujours l'ancienne que je récupère dans IPAddress au lieu de la nouvelle (après affectation ou après le renew).

    Ce n'est pas très génant en soi et il suffise que je ne l'affiche pas mais j'aimerais bien ne pas mourir idiot. Comment réactualiser cette valeur après modif ?

    En tout cas un grand merci pour m'avoir mis sur cette piste

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 437
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 437
    Par défaut
    regarde peut-être si il n'y aurait pas plusieurs adresses dans NIC.IPAddress, vu que c'est un tableau

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 38
    Par défaut
    Je l'ai fait. Si je mets 1 à la place de 0 j'obtiens un message d'injures (indice trop grand). Normal, la taille du tableau est fixée par la déclaration.

    J'ai essayé en vain un tas de combines pour arriver à récupérer l'adresse IP après modif. La plus simple me semblait être de tenter de relire l'occurence traitée à l'aide de son index mais là aussi, que dalle. Échec générique / Code 80041001. Les objets WMI ne se laissent pas manipuler facilement.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 437
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 437
    Par défaut
    Tu as essayé de créer un 2nd objet wmi après le passage en statique et lire son adresse ip ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 38
    Par défaut
    Voui, et avec un autre nom. Adresse IP non renseignée ! Pourtant quand on fait des ipconfig pour contrôler on voit que les modifs ont bien été prises en compte.

    À se tapper la tête contre les murs.

  10. #10
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    les propriétés du swbemobject ne sont pas mise à jour après exécution d'une méthode
    il faut le réinitialiser

    (à exécuter en mode admin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    NICName = "Realtek PCIe GbE Family Controller"
    ipaddr = Array("192.168.1.140")
    subnet = Array("255.255.255.0")
     
    Set NIC = GetObject("winmgmts:").ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where Description=""" & NICName & """").ItemIndex(0)
    If NIC.DHCPEnabled Then
      ret = NIC.EnableStatic(ipaddr, subnet)
    Else
      ret = NIC.EnableDHCP
    	NIC.RenewDHCPLease
    End If
    ' réinit
    Set NIC = GetObject("winmgmts:").ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where Description=""" & NICName & """").ItemIndex(0)
    msgbox "code retour = " & ret & VbCrLf & "DHCP activé : " & NIC.DHCPEnabled & vbCrLf & "Nouvelle adresse IP : " & NIC.IPAddress(0)
    pour info, car ce n'est pas bien documenté, la propriété IPAddress() contient l'adresse IPv4 en index 0 et l'éventuelle IPv6 en index 1
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 38
    Par défaut
    Bonjour omen et merci pour ton intervention.

    J'avais déjà, selon la suggestion de umfred tenté une 2e instanciation de mon objet NIC après avoir effectué les modifs, mais sans succès. N'ayant aucune expérience de la méthode ExecQuery, ni d'ailleurs des objets WMI, j'avais fait comme pour la 1ère (cf. le code publié dans mon premier message) en m'appuyant sur le numéro de l'occurence prélablement sauvegardé. Résultat : valeurs des propriétés non renseignées.

    Avec ce que tu as proposé tout baigne et en plus c'est beaucoup plus élégant. Ce qui clot le sujet.

    Encore un grand merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment avoir une adresse publique statique
    Par Mwekesha dans le forum Réseaux
    Réponses: 2
    Dernier message: 13/03/2024, 16h53
  2. [XL-2016] Affecter à une variable, l'adresse de la cellule trouvée via Find
    Par Laïnea dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2017, 19h50
  3. Affecter une adresse ip public a mon ordinateur
    Par hicdu06 dans le forum Hardware
    Réponses: 3
    Dernier message: 12/12/2014, 11h54
  4. affecter une adresse ip sur chaque port du switch
    Par blagapart dans le forum Développement
    Réponses: 1
    Dernier message: 08/08/2005, 19h42
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo