Jump to content
Sign in to follow this  
Exec

DNS mit VBScript auslesen?

Recommended Posts

Hallo liebe Helfershelfer,

 

ich habe mich in den letzten Wochen etwas mit VBScripting beschäftigt da ich eine Inventarisierung aller Clients plane. Es wird nach dem Mappen der Netzlaufwerke ein weiteres VBScript gestartet, das zur Inventarisierung.(liegt beides unter SYSVOL).

 

Es wird eine txt erstellt welche auf einem der Netzlaufwerke abgelegt wird. Dort sind bisher folgende Daten drin.

 

IP, Standard-Gateway, Domäne, Benutzer, Computername, MAC-Adresse (alles per WMI)

 

Zusätzlich wird noch RAM, CPU, Speicherplatz (alle Laufwerke), OS + SP, sowie die Office Version ausgelesen. Später sollen noch alle installierten Programme in die txt geschrieben werden.

 

Viel wichtiger ist allerdings das ich die Liste der DNS Adressen gerne auslesen würde, in unserem Fall 3.

 

Per batch kann ich zwar die komplett ipconfig auslesen aber dazu müsste ich per batch die zuvor erstellte txt editieren und den Wert hinzufügen. Die txt's bekommen per vbs allerdings schon den Namen der User und den Computernamen. Ich wüsste nicht wie ich auf diese txt's per batch verweisen müsste damit das klappt.

 

ich würde gerne per WMI die DNS abfragen, habe aber bisher keine Möglichkeit gefunden die klappt. Bisher habe ich es mit "DNSServerSearchOrder" und "DNSHostName" probiert, bekomme aber keinen Wert zurück. Ich bin mir auch nicht sicher ob die Werte auch die sind die ich haben will :confused:

 

Hat einer von euch einen Vorschlag wie ich das angehen könnte ohne dabei mein mühsam zusammengeflicktes Script zu verwerfen?:)

 

lg und vielen Dank im Voraus!

 

Exec

Share this post


Link to post

Danke für den Link...hab da vieles gefunden das mir geholfen hat, aber ich habe jetzt ein neues Problem.

 

Ich kann mir per echo zwar die dns-Adressen ausgeben lassen, aber ich möchte die Adressen (in diesem Fall 3) in eine Textdatei abspeichern lassen. Das klappt nur teilweise, wenn ich in dem script das hinter deinem link liegt "dns= objAdapter.DNSServerSearchOrder(i)" festlege um es danach mit clientlog.WriteLine "DNS : " & dns in die Datei zu schreiben wird nur die letzte Adresse ausgegeben.

 

Weiß jemand wie ich alle drei Adressen in die txt bekomme?

Ich muss dazu sagen das ich blutiger Anfänger in sachen VBS und WMI bin.

 

cheers

Exec

Share this post


Link to post

Für einen blutige Anfänger hast Du Dir aber schon mächtig was vorgenommen ;)

 

Du musst das schon innerhalb der For - Next-Schleife in Deine Datei ausgeben.

 For i = 0 To UBound(objAdapter.DNSDomainSuffixSearchOrder)
    clientlog.WriteLine "DNS" & i & " : " & objAdapter.DNSDomainSuffixSearchOrder(i)
 Next

Share this post


Link to post

Ja ich weiß das es nicht das einfachste für den Anfang ist.

 

Hier ein Teil des scripts, du wirst mit Sicherheit so einiges finden das nicht ganz so koscher ist :)

 

...
strcomputer = "."

Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colAdapters = objWMIService.ExecQuery _
   ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

n = 1
For Each objAdapter in colAdapters
  If Not IsNull(objAdapter.IPAddress) Then
     For i = 0 To UBound(objAdapter.IPAddress)
     Next
  End If
  If Not IsNull(objAdapter.IPSubnet) Then
     For i = 0 To UBound(objAdapter.IPSubnet)  
     Next
  End If
  If Not IsNull(objAdapter.DefaultIPGateway) Then
     For i = 0 To UBound(objAdapter.DefaultIPGateway) 
     Next
  End If
  If Not IsNull(objAdapter.DNSServerSearchOrder) Then
     For i = 0 To UBound(objAdapter.DNSServerSearchOrder)
       dns= objAdapter.DNSServerSearchOrder(i)
     Next
  End If

...
clientlog.WriteLine "DNS : " & dns

 

Das script ist wesentlich umfangreicher, aber dies ist der Teil der nicht funktioniert bzw. von dem ich keine Ahnung habe. Mich interssiert dabei auch nur die DNS, die MAC, IP. Gateway etc bekomme ich schon. Die Sachen die du da sehen kannst sind nur aus einem anderen Script kopiert und leicht abgeändert. Es soll also nicht die IP etc nochmal ausgelesen werden ;)

Edited by Exec
Was vergessen...

Share this post


Link to post

Nu ja... wie gesagt... die Antwort steht oben schon ;)

 

objAdapter.DNSServerSearchOrder ist in diesem Fall ein Array mit mehreren Einträgen, welche mit der FOR...NEXT-Schleife einzeln ausgegeben werden.

Ebenso sieht's mit IP und MAC aus.

 

Daher nochmal: Am einfachsten die Ausgabe in Deine Textdatei jeweils direkt in die FOR...NEXT-Schleife mit einbauen.

Share this post


Link to post

Danke, es klappt jetzt. Hätte nicht gedacht das es so einfach ist ;)

 

Aber noch eine andere Frage, ich habe bisher die IP, MAC etc. so ausgelesen:

Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colitem = objWMIService.ExecQuery _
   ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
for each objitem in colitem
strIPAddress = Join(objitem.IPAddress, ",")
IP = stripaddress
next

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objItem in colItems
MAC= objItem.MACAddress
Next

 

Mit der Schleife kann ich diese Sachen ebenfalls auslesen, nur was ist jetzt "besser" also schneller oder kompakter?

 

Rein optisch behaupte ich das der neue part performanter sein müsste, laut google Recherchen sind aber "ExecQuery" Abfragen ebenfalls sehr kompakt....

Wäre nicht lebensnotwendig aber schon interessant das zu wissen ;)

 

Gruß, Exec

Share this post


Link to post

Ich versteh die Frage leider nicht so ganz...

 

Aber eine Anmerkung zu dem Codeschnippsel:

Für jeden Gimmick immer wieder die gleiche WMI-Abfrage auszuführen... das ist eher nicht performant ;)

 

...ansonsten gibt es doch keine Unterschied? Die Abfrage ist doch in beiden Fällen per "ExecQuery" ?!?

 

Den Part mit den Collections solltes Du ggf. mal nochmal genauer recherchieren. Momentan bekommst Du IP's als kommaseparierte Liste, MACs ebenfalls nur die letzte...

Share this post


Link to post

Oha, ist mir grade erst aufgefallen...da sieht man mal das ich noch einige Grundsätzliche Sachen zu lernen habe. Gibt ja genug Seiten dafür.

Ich dachte man müsste jedes mal die Abfrage dazuschreiben...

 

Wie meinst du das, "kommaseparierte Liste"...

Meine Ausgabe sieht so aus:

 

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

Rechnername: Mustermann // Datum: 18.05.2010 08:56:42

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

innotek GmbH VirtualBox

Seriennummer: xxxxx

Intel® Core2 CPU 6400 @ 2.13GHz: 2126 Mhz

Arbeitsspeicher: 511,48 MB

C: 0,15 / 9,99 GByte

 

Betriebssystem: Microsoft Windows XP, Service Pack 3

Office Vs: 2007

Benutzer: <username>

Domain: <domain>

Computername: <PC-Name>

MAC Adresse: 08:00:27:F0:03:1E

IP Adresse: 10.10.0.62

Standard Gateway: 10.10.0.1

 

Nur die letzte MAC-Adresse ist möglich. Wobei ich auch nur eine brauche. WLAN wäre nicht interessant und i.d.R. sollte jeder PC nur einen Ethernetadapter haben.

 

Ich kämpfe grade noch mit doppelten Ausgaben, es werden mir statt der gewünschten 3 DNS Adressen die 2 letzten nochmal ausgegeben. Dürfte wohl an der Schleife liegen, hab zuviel gepfuscht :)

Edited by Exec
Was vergessen...

Share this post


Link to post

Mit kommaseparoierte Liste meine ich das hier:

strIPAddress = Join(objitem.IPAddress, ",")

Damit werden alle IP-Adressen eines Adapters mit Komma getrennt aneinandergehängt. Merkst Du nur nicht, weil Du vermutlich nicht mehrere IP-Adressen an einem Adapter hast ;)

 

Mal ne kurze Erklärung.

Hiermit...

Set colitem = objWMIService.ExecQuery _
   ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

...werden alle Adapter, die ne IP-Adresse haben, ausgewählt. D.h. in dem colItem stehen sämtliche Adapter-Objekte.

 

Hiermit...

for each objitem in colitem

...durchläufst Du diese Collection. D.h in objItem stehen nacheinander (für jeden Durchlauf der "FOR EACH"-Schleife) die einzelnen Adapter.

 

Rest, wie gehabt. Wie gesagt, das Problem hierbei ist, dass nur die letzte Adapterinfo hinterher in den Variablen I bzw. MAC stehen. Sollte der letzte Adapter in der Collection mal der WLAN-Adapter sein, kommen nur dessen Daten!

strIPAddress = Join(objitem.IPAddress, ",")
IP = stripaddress
MAC= objItem.MACAddress
next

 

Daher meine Empfehlung, dein Script wie Du es anfangs gepostet hast, entspr. umzubauen:

For Each objAdapter in colAdapters
  clientlog.writeline "Adapter: " & objAdapter.Caption
  clientlog.WriteLine "MAC: " & objAdapter.MACAddress
  If Not IsNull(objAdapter.IPAddress) Then
     For i = 0 To UBound(objAdapter.IPAddress)
        clientlog.WriteLine "IP: " & objAdapter.IPAddress(i)
     Next
  End If
  If Not IsNull(objAdapter.DNSServerSearchOrder) Then
     For i = 0 To UBound(objAdapter.DNSServerSearchOrder)
         clientlog.WriteLine "DNS: " & objAdapter.DNSServerSearchOrder(i)
     Next
  End If
Next

Share this post


Link to post

Vielen Dank für die Erläuterungen!

 

Einige der Sachen sind mir schon klar, allerdings habe ich viele Sachen nur kopiert und dementsprechend nur vermuten können was da wirklich passiert. Du hast etwas Licht in die Sache gebracht :)

 

Das Script funktioniert jetzt perfekt in der "gekürzten" Version. Das ich doppelte Adressen bekommen habe lag daran, dass ich es über eine vbox (XP) getestet habe und es dann einen Host-Ethernetadapter und den emulierten der vbox gibt. Auf "normalen" Clients wird natürlich nur ein Adapter ausgelesen.

 

Vielen Dank für deine Hilfe und bis zum nächsten Problem ;)

 

Gruß, Exec

Share this post


Link to post

Hab doch noch was zu meckern...

 

Ich bekomme bei einigen Clients bis zu 4 Adapter aufgelistet, allerdings werden da keine virtuellen Maschinen verwendet und die MAC Adressen sind immer identisch. Die Adapter ID's sind verschieden und es sind auch verschiedene Adapter-Namen. DNS, IP etc sind ebenfalls identisch bei jedem Adapter.

Ist es möglich nur einmal diese Werte auszulesen?

Share this post


Link to post

Ich poste mal ein Beispiel wie es in der txt dann aussieht:

Adapter: [00000008] Intel(R) 82566DM Gigabit Network Connection
MAC: 00:1D:7D:57:AC:5E
IP Adresse: 10.10.0.152
Subnet-Mask: 255.255.255.0
Standard Gateway: 10.10.0.1
DNS : 10.12.0.3
Adapter: [00000011] D-Link DFE-500TX PCI-Fast Ethernet-Adapter (Rev B/C)
MAC: 00:1D:7D:57:AC:5E
IP Adresse: 10.10.0.152
Subnet-Mask: 255.255.255.0
Standard Gateway: 10.10.0.1
DNS : 10.10.0.10
Adapter: [00000013] Intel(R) 82566DM-2 Gigabit Network Connection
MAC: 00:1D:7D:57:AC:5E
IP Adresse: 10.10.0.152
Subnet-Mask: 255.255.255.0
Standard Gateway: 10.10.0.1
DNS : 10.10.0.10
DNS : 213.129.232.1
DNS : 213.129.226.2

 

So sieht das bei vielen, aber nicht bei allen aus...

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...