Exec 10 Geschrieben 5. Mai 2010 Melden Teilen Geschrieben 5. Mai 2010 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 Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 5. Mai 2010 Melden Teilen Geschrieben 5. Mai 2010 Hallo, DNSServerSearchOrder aus der Klasse win32_networkadapterconfiguration ist schon richtig List Network Configuration cu blub Zitieren Link zu diesem Kommentar
Exec 10 Geschrieben 17. Mai 2010 Autor Melden Teilen Geschrieben 17. Mai 2010 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 Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 17. Mai 2010 Melden Teilen Geschrieben 17. Mai 2010 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 Zitieren Link zu diesem Kommentar
Exec 10 Geschrieben 17. Mai 2010 Autor Melden Teilen Geschrieben 17. Mai 2010 (bearbeitet) 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 ;) bearbeitet 17. Mai 2010 von Exec Was vergessen... Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 17. Mai 2010 Melden Teilen Geschrieben 17. Mai 2010 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. Zitieren Link zu diesem Kommentar
Exec 10 Geschrieben 18. Mai 2010 Autor Melden Teilen Geschrieben 18. Mai 2010 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 Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. Mai 2010 Melden Teilen Geschrieben 18. Mai 2010 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... Zitieren Link zu diesem Kommentar
Exec 10 Geschrieben 18. Mai 2010 Autor Melden Teilen Geschrieben 18. Mai 2010 (bearbeitet) 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 :) bearbeitet 18. Mai 2010 von Exec Was vergessen... Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. Mai 2010 Melden Teilen Geschrieben 18. Mai 2010 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 Zitieren Link zu diesem Kommentar
Exec 10 Geschrieben 19. Mai 2010 Autor Melden Teilen Geschrieben 19. Mai 2010 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 Zitieren Link zu diesem Kommentar
Exec 10 Geschrieben 19. Mai 2010 Autor Melden Teilen Geschrieben 19. Mai 2010 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? Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 19. Mai 2010 Melden Teilen Geschrieben 19. Mai 2010 Kann man mit entspr. Abfragen bestimmt händeln ;) Kannst Du ein Beispiel geben, wie das dann aussieht? Zitieren Link zu diesem Kommentar
Exec 10 Geschrieben 19. Mai 2010 Autor Melden Teilen Geschrieben 19. Mai 2010 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... Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.