madmartigan Desperate Houseman | 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...
|