DNS query en VBS

DNS query en VBS - VB/VBA/VBS - Programmation

Marsh Posté le 19-08-2008 à 09:02:07    

Salut,
 
J'ai besoin de faire des requêtes de type "SRV" au DNS dans un vbscript...
 
Pour l'instant je fonctionne comme ceci :
 

Function GetSRVList(str_Request)
 dim dic_Result
 dim str_line, str_key, str_value
 Set dic_Result = CreateObject("Scripting.Dictionary" )
  dic_Result.RemoveAll
 Set obj_WMIService = GetObject("winmgmts:\\.\root\cimv2" )
 str_commandline = "cmd /c nslookup -querytype=SRV " & str_service & "." & str_domain
 set obj_MSShellExec = obj_MSShell.Exec(str_commandline)
 While Not obj_MSShellExec.StdOut.AtEndOfStream
  str_Line = lcase(obj_MSShellExec.StdOut.ReadLine)
  If InStr(1, str_Line, "svr hostname" ) > 0 Then
   str_key   = GetRight(str_Line, " = " )
   str_value = GetRight(str_Line, " = " )
   dic_Result.Add str_key, str_value
   End If
  Wend
 For each str_server in dic_Result.Keys
  AddSRVList str_server
  wmi_PingQuery = "Select * From Win32_PingStatus Where Address = '" & str_server & "'"
  Set objPing = obj_WMIService.ExecQuery(wmi_PingQuery)
  For Each objStatus in objPing
   If IsNull(objStatus.StatusCode) Or objStatus.Statuscode<>0 Then
    dic_Result.Item(str_server) = "Computer is Unreachable!"
   Else
    dic_Result.Item(str_server) = objStatus.ProtocolAddress
    End If
   Next
  Next
 Set GetSRVList = dic_Result
 End Function


 
La fonction marche parfaitement, on lui passe en paramètre le nom du service (_ldap._tcp.dc._msdcs.roudoudou.lan par exemple), elle retourne un dictionnaire contenant les noms des serveurs et leurs adresses.
 
Sauf que ... c'est môôôôôôôche
 
L'appel à wscript.shell.execute (pour appeler nslookup et en lire le résultat) fait apparaitre une vilaine fenetre noire, très peu de temps mais quand même ... on la voit, et c'est très laid.
 
Donc je cherche une méthode plus subtile d'interoger le DNS...
Je n'ai rien trouvé en WMI qui fasse ça (sauf si l'on est directement sur le serveur DNS : <<GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\MicrosoftDNS" )>> ne marche pas sur un poste client).
Je suppose que la fonction est disponible dans dnsapi.dll ou windns.dll, mais je n'ai pas la moindre idée de comment faire pour intéroger ces bestiolles là ... :(
 
Une idée ?


---------------
Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...
Reply

Marsh Posté le 19-08-2008 à 09:02:07   

Reply

Marsh Posté le 19-08-2008 à 10:56:32    

Bonjour,
Ca fait plaisir de voir quelqu'un qui s'intéresse au VBS.
Le problème de l'ouverture fugitif de la fenêtre DOS peut être contourné en utilisant run au lieu de exec. C'est expliqué dans l'article http://www.microsoft.com/technet/s [...] x?mfr=true qui dit

Citation :

In many respects, this makes the Exec method a better choice than the Run method. However, the Run method is still useful in a number of situations:
You might want to run the application in a specified window type, such as a minimized window. Exec offers no control over window style; Run offers the options listed in Table 3.9.

Reply

Marsh Posté le 19-08-2008 à 12:17:37    

olivthill a écrit :

Bonjour,
Ca fait plaisir de voir quelqu'un qui s'intéresse au VBS.
Le problème de l'ouverture fugitif de la fenêtre DOS peut être contourné en utilisant run au lieu de exec. C'est expliqué dans l'article http://www.microsoft.com/technet/s [...] x?mfr=true qui dit

Citation :

In many respects, this makes the Exec method a better choice than the Run method. However, the Run method is still useful in a number of situations:
You might want to run the application in a specified window type, such as a minimized window. Exec offers no control over window style; Run offers the options listed in Table 3.9.



Salut,
Eh oui, y'a encore des barrés qui font du bon vieux script vbs...
 
J'ai déjà examiné l'option "Run method"... malheureusement elle implique de passer par un fichier plat (passé à l'intérieur de la commande cmd via le redirecteur ">" ) et je ne dois pas ecrire quoi que ce soit sur la machine...
 
J'ai imaginé rediriger le stream resultat (les lignes retournées par la commande nslookup) dans un variable système que je n'aurais plus qu'a lire  
 
genre "nslookup ... > set /p lookupresult="quelles infos ?""  
 
mais ça ne marche pas terrible ...
genre même pas du tout.
parce que déjà stoker UN resultat dans une variable en "DOS" c'est bien dur, mais alors un stream ! ! !  
 
Donc voilà ... point mort :(
 
Si tu as d'autres idées, même farfelues, je prend...   :ange:


---------------
Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...
Reply

Marsh Posté le 19-08-2008 à 12:28:19    

Je ne suis pas trés calé en vbs et surtout je ne vois pas à quoi ressemble un stream mais je fais une analogie avec le fait de ne pas pouvoir passer que des variables uni-dimesionnelles entre html et javascript.  
Dans ce cas là, on peut utiliser la serialization, un exemple en vb ici : http://www.vb-helper.com/tut5.htm


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Sujets relatifs:

Leave a Replay

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