Werte (IPs) aus Excel-Datei suchen, finden und in andere datei kopieren
Hallo,
ich muss in meinem Netzwerk alle Subnetzmasken ändern und hatte mir überlegt, da ich die IPs in einer Exceldatei habe, irgendwie eine Batchdatei zu erstellen, die diese Inhalte sucht und in eine Datei schreibt. ich hätte mit netsh interface ip set address name="LAN-Verbindung" source=static addr=192.168.52.42 mask=255.255.255.0 die Subnetzmasken der ca. 160 Pcs geändert. Also mit einem Skript könnte ich mir vielleicht viel Arbeit sparen. Danach hätte ich die neuen Skripte per GPO verteilt.
Ein weiteres problem ist, dass in der Exceldatei die PCs nach Gebäude sortiert sind und diese in den Tabellen wieder zu finden sind. (Eine Tabelle=ein Geäude).
Vielen Dank für Eure Hilfe jetzt schon einmal
mfg
heiko
ich muss in meinem Netzwerk alle Subnetzmasken ändern und hatte mir überlegt, da ich die IPs in einer Exceldatei habe, irgendwie eine Batchdatei zu erstellen, die diese Inhalte sucht und in eine Datei schreibt. ich hätte mit netsh interface ip set address name="LAN-Verbindung" source=static addr=192.168.52.42 mask=255.255.255.0 die Subnetzmasken der ca. 160 Pcs geändert. Also mit einem Skript könnte ich mir vielleicht viel Arbeit sparen. Danach hätte ich die neuen Skripte per GPO verteilt.
Ein weiteres problem ist, dass in der Exceldatei die PCs nach Gebäude sortiert sind und diese in den Tabellen wieder zu finden sind. (Eine Tabelle=ein Geäude).
Vielen Dank für Eure Hilfe jetzt schon einmal
mfg
heiko
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128426
Url: https://administrator.de/contentid/128426
Ausgedruckt am: 20.11.2024 um 02:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo ufo2012!
Deine Beschreibung ist ziemlich herbstlich (ich zumindest seh' nicht so richtig durch den Nebel) ...
Zumindest irgendeine Art von Struktur müsste doch in Deinen Exceldaten zu erkennen (und demnach auch zu beschreiben) sein.
Im Übrigen ist auch der geplante Ablauf der Aktion nicht nachvollziehbar: Wie/wo willst Du den Batch starten, wie soll die neue Maske aussehen (wenn nicht einheitlich: nach welchem Schema soll die Zuordnung erfolgen), ...
Grüße
bastla
Deine Beschreibung ist ziemlich herbstlich (ich zumindest seh' nicht so richtig durch den Nebel) ...
Zumindest irgendeine Art von Struktur müsste doch in Deinen Exceldaten zu erkennen (und demnach auch zu beschreiben) sein.
Im Übrigen ist auch der geplante Ablauf der Aktion nicht nachvollziehbar: Wie/wo willst Du den Batch starten, wie soll die neue Maske aussehen (wenn nicht einheitlich: nach welchem Schema soll die Zuordnung erfolgen), ...
Grüße
bastla
Hallo ufo2012!
Wäre es nicht einfacher, per "StartUp"-Script jeden Rechner seine IP auslesen (Stichwort: "
in eine Logdatei geschrieben werden (mit ";" als Trennzeichen ließe sich diese auch wieder in Excel importieren) ...
[Edit] Bessere Variante für das Auslesen:
Der entsprechende Einzeiler, um die Änderung durchzuführen, könnte so aussehen (Demo am Prompt - wegen des
Mit (angedeutetem) Logging:
[Edit 2] Zusätzliche Anführungszeichen für konkrete Suche nach
[/Edit]
Grüße
bastla
Wäre es nicht einfacher, per "StartUp"-Script jeden Rechner seine IP auslesen (Stichwort: "
ipconfig
" oder, besser, "WMI") und damit die Einstellung neu setzen zu lassen? Eine "Rückmeldung" könnte durch einecho %date%;%time%;%computername%;%ausgeleseneIP% >> \\Server\Share\ChangeSubnetMask.log
[Edit] Bessere Variante für das Auslesen:
netsh interface ip dump|findstr "mask"|findstr "LAN-Verbindung"
echo
wird der netsh
-Befehl nur angezeigt, nicht ausgeführt):for /f "tokens=1-5 delims==" %a in ('netsh interface ip dump^|findstr "mask"^|findstr """LAN-Verbindung"""') do @echo netsh interface ip %a=%b=%c=%d=neueMaske
for /f "tokens=1-5 delims==" %a in ('netsh interface ip dump^|findstr "mask"^|findstr """LAN-Verbindung"""') do @echo netsh interface ip %a=%b=%c=%d=neueMaske && @for /f %i in ("%d") do @echo Computer: %computername%;IP: %i
"LAN-Verbindung"
(und nícht zB "LAN-Verbindung 2") nachgetragen [/Edit 2][/Edit]
Grüße
bastla
Hallo ufo2012!
In einem Batch müssen Laufvariable einer "
Die Schritte:
Da
zuviel Information (ev auch für mehrere Netzwerkadapter) liefert, muss gefiltert werden - mit
(die zusätzlichen Anführungszeichen - trage ich oben auch noch nach - um "LAN-Verbindung" herum sorgen dafür, dass eine "LAN-Verbindung 2" ebenfalls aussortiert wird) werden nur noch jene Zeilen (sollte ja nur noch eine sein) weiterverarbeitet, die die Begriffe "mask" und "LAN-Verbindung" beinhalten.
Anhand der in dieser Zeile enthaltenen "=" kann eine Aufteilung in die 5 Teile ("Tokens") %%a bis %%e vorgenommen werden. Diese Teile werden dann (bis auf den letzten Teil mit der Subnetmaske) wieder kombiniert und durch die gewünschte Maske ergänzt.
Um die IP auslesen zu können, muss der vierte Teil (%%d enthält lt Deinem Beispiel "166.1.37.42 mask") nochmals zerlegt werden (das Leerzeichen, das hiefür benötigt wird, ist ein Standardtrennzeichen und muss nicht angegeben werden, ebenso wird ohne anderweitige Angabe immer das erste Token, hier also alles vor dem ersten Leerzeichen, zurückgegeben) - in %%i steht dann die IP-Adresse.
Die Verknüpfung der beiden Befehle mit "&&" soll schließlich im "Ernstfall" dafür sorgen, dass die Ausgabe der Daten in die Logdatei nur erfolgt, wenn der "
Zum Auslesen einer Excel-Datei mit Batch:
Das ist zunächst eigentlich nur über ein VBScript (und dann kannst Du das Ganze gleich aus Excel heraus per VBA abfackeln) oder den Umweg über (da mehrere Tabellen) mehrere Textdateien (TAB-delimited oder CSV) möglich, und dann müssen immer noch Kriterien dafür vorliegen, was denn nun als IP-Adresse zu interpretieren ist (deshalb auch oben der Hinweis auf die Struktur) - per RegEx ließen sich zwar vermutlich die Adressen auch extrahieren, aber das ganze Verfahren wäre mE unnötig kompliziert (da würde ich noch eher die Daten in Excel zusammenkopieren und ggf per Sortierung eine Liste der Adressen erzeugen).
Grüße
bastla
In einem Batch müssen Laufvariable einer "
for
"-Schleife immer mit doppelten Anführungszeichen geschrieben werden, daher:netsh interface ip dump|findstr "mask"|findstr "LAN-Verbindung"
for /f "tokens=1-5 delims==" %%a in ('netsh interface ip dump^|findstr "mask"^|findstr "LAN-Verbindung"') do @echo netsh interface ip %%a=%%b=%%c=%%d=255.255.0.0 && @for /f %%i in ("%%d") do @echo Computer: %computername%;IP: %%i
pause
Da
netsh interface ip dump
netsh interface ip dump|findstr "mask"^|findstr """LAN-Verbindung"""
Anhand der in dieser Zeile enthaltenen "=" kann eine Aufteilung in die 5 Teile ("Tokens") %%a bis %%e vorgenommen werden. Diese Teile werden dann (bis auf den letzten Teil mit der Subnetmaske) wieder kombiniert und durch die gewünschte Maske ergänzt.
Um die IP auslesen zu können, muss der vierte Teil (%%d enthält lt Deinem Beispiel "166.1.37.42 mask") nochmals zerlegt werden (das Leerzeichen, das hiefür benötigt wird, ist ein Standardtrennzeichen und muss nicht angegeben werden, ebenso wird ohne anderweitige Angabe immer das erste Token, hier also alles vor dem ersten Leerzeichen, zurückgegeben) - in %%i steht dann die IP-Adresse.
Die Verknüpfung der beiden Befehle mit "&&" soll schließlich im "Ernstfall" dafür sorgen, dass die Ausgabe der Daten in die Logdatei nur erfolgt, wenn der "
netsh
"-Befehl mit einem Errorlevel 0 (also ohne Fehler) beendet wurde.Zum Auslesen einer Excel-Datei mit Batch:
Das ist zunächst eigentlich nur über ein VBScript (und dann kannst Du das Ganze gleich aus Excel heraus per VBA abfackeln) oder den Umweg über (da mehrere Tabellen) mehrere Textdateien (TAB-delimited oder CSV) möglich, und dann müssen immer noch Kriterien dafür vorliegen, was denn nun als IP-Adresse zu interpretieren ist (deshalb auch oben der Hinweis auf die Struktur) - per RegEx ließen sich zwar vermutlich die Adressen auch extrahieren, aber das ganze Verfahren wäre mE unnötig kompliziert (da würde ich noch eher die Daten in Excel zusammenkopieren und ggf per Sortierung eine Liste der Adressen erzeugen).
Grüße
bastla