Bonjour à tous,

Je sollicite votre aide pour un script que je n'arrive pas à développer (faut dire que mes compétences sont plus que maigres)
Objectif : récupérer sous forme d'un fichier csv (séparateur virgule), des infos relatives aux DNS de plusieurs machines distantes
Format fichier cible : NomOrdi,Adresse IP,DHCP(Y/N),DNS1,DNS2,DNS3,SuffixDNS1, SuffixDNS2,SuffixDNS3,SuffixDNS4,...SuffixDNSn,

Explications :
Dans un fichier externe (machinelist.txt), il y a une liste de machine avec leur nom FQDN sur lesquelles je souhaite récupérer ces infos
Il y a donc une boucle itérative et pour chaque machine, un certain nombre de requêtes WMI
Même s'il y a plus de 3 serveurs DNS qui sont paramétrés, je ne veux récupérer que les 3 premiers, par contre, je veux récupérer la totalité de tous les suffixes DNS (raison pour laquelle je les mets à la fin de chaque ligne de mon fichier csv)

J'ai donc un script qui fonctionne en partie, mais j'ai beaucoup de soucis (il y a plus de colonnes que ce que je souhaite mais c'est pas grave, c'est parce que je l'ai récupéré d'un autre endroit)

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
On Error resume next
Set Fso = CreateObject("Scripting.FileSystemObject")
Set InputFile = fso.OpenTextFile("MachineList.Txt")
Do While Not (InputFile.atEndOfStream)
	strComputer = InputFile.ReadLine
 
	Set objWMIService = GetObject("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
	Set colAdapters = objWMIService.ExecQuery _
	("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
	For Each objAdapter in colAdapters
		strIP = strIP & "Host name: ;" & objAdapter.DNSHostName & vbtab
		strIP = strIP & "DNS domain: ;" & objAdapter.DNSDomain & vbtab
		'strIP = strIP & "DNS suffix search list: " & objAdapter.DNSDomainSuffixSearchOrder & vbtab
		strIP = strIP & "Description: ;" & objAdapter.Description & vbtab
		strIP = strIP & "Physical address: ;" & objAdapter.MACAddress & vbtab
		strIP = strIP & "DHCP enabled: ;" & objAdapter.DHCPEnabled & vbtab
		If Not IsNull(objAdapter.IPAddress) Then
			For i = LBound(objAdapter.IPAddress) To UBound(objAdapter.IPAddress)
				strIP = strIP & "IP address: ;" & Join(objAdapter.IpAddress) & vbtab
			Next
		End If
		If Not IsNull(objAdapter.IPSubnet) Then
			For i = LBound(objAdapter.IPSubnet) To UBound(objAdapter.IPSubnet)
				strIP = strIP & "Subnet: ;" & objAdapter.IPSubnet(i) & vbtab
			Next
		End If
		If Not IsNull(objAdapter.DefaultIPGateway) Then
			For i = LBound(objAdapter.DefaultIPGateway) To UBound(objAdapter.DefaultIPGateway)
				strIP = strIP & "Default gateway: ;" & objAdapter.DefaultIPGateway(i) & vbtab
			Next
		End If
		strIP = strIP & "DHCP server: ;" & objAdapter.DHCPServer & vbtab
		If Not IsNull(objAdapter.DNSServerSearchOrder) Then
			For i = LBound(objAdapter.DNSServerSearchOrder) To UBound(objAdapter.DNSServerSearchOrder)
				strIP = strIP & "DNS server: ;" & objAdapter.DNSServerSearchOrder(i) & vbtab
			Next	
		End If
		'strIP = strIP & "Primary WINS server: " & objAdapter.WINSPrimaryServer & vbtab
		'strIP = strIP & "Secondary WINS server: " & objAdapter.WINSSecondaryServer & vbtab
		strIP = strIP & "Lease obtained: ;" & objAdapter.DHCPLeaseObtained & vbtab
		strIP = strIP & "Lease expires: ;" & objAdapter.DHCPLeaseExpires & vbtab
		strIP = strIP & vbcrlf 
	Next
Loop
Set oFS = CreateObject("Scripting.FileSystemObject")
Set strLogFile = oFS.OpenTextFile("c:\" & output & "output.csv",8,True)
strLogFile.WriteLine strIP
strLogFile.Close 
Wscript.echo done
Plusieurs problèmes :
- si l'ordinateur a plusieurs interfaces réseau, il me faut plusieurs lignes ce qui n'est pas pris en compte par le script je crois (pas pu tester pour le moment)
- de mes essais, il semble que la méthode objAdapter.WINSPrimaryServer me renvoie systématiquement un blanc quand j'interroge un OS de type serveur, alors que je récupère bien l'IP avec un O.S. de type workstation
- je ne sais pas encore comment récupérer la liste complète des suffixes DNS (séparé par une virgule)
- si l'ordinateur ne peut être joint ou que les droits pour récupérer ces infos ne sont pas suffisant, il faudra que je puisse avoir au niveau de l'IP quelque chose du genre "ERROR" (alors que pour le moment, j'ai la même ligne qui sera répété)
- de manière générale, je pense qu'il serait probablement mieux aussi d'écrire dans le fichier de sortie après chaque ligne et non pas de tout concaténer dans une gigantesque chaîne de caractères qui est flushée à la toute fin de programme

Voilà, dîtes-moi ce que vous en pensez et si vous pouvez m'aider, ce serait top moumoute
Par avance merci