Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Hosts-Datei dynamisch ergänzen

Frage Entwicklung Batch & Shell

Mitglied: kugman

kugman (Level 1) - Jetzt verbinden

24.08.2010 um 16:08 Uhr, 6534 Aufrufe, 7 Kommentare

in einem Domänen-Netzwerk soll die Hosts-Datei zentral wartbar gemacht werden. Die Einträge, die bereits vorhanden sind (können unterschiedlich sein) sollen jedoch erhalten bleiben. Änderungen sollen möglich sein.

Die Logik, die ich mir ausgedacht habe ist folgende:

1.) Master-Datei

es gibt eine Master-Datei Namens hosts-master.txt Diese steht auf dem Fileserver und dort werden vom Admin Ergänzungen eingetragen, um die alle lokalen Hosts-Dateien ergänzt werden sollen.

Diese Datei hat den Inhalt:

01.
192.168.123.1	haumichblau.irgendwas.de 
02.
10.47.211.5	laberzapf.trallalla.com 
03.
172.18.25.3	nochein.server.net
2.) Skript (das per Startskript bei der Anmeldung auf dem einzelnen XP-Rechner läuft)

Das Skript soll von der Logik her jede Zeile der Masterdatei prüfen, ob der Zeileninhalt in der lokalen Hosts-Datei bereits vorhanden ist.
- wenn ja, prüfe nächste Zeile
- wenn nein - trage es in der hosts-Datei zusätzlich mit ein


hier meine Batch-Datei
01.
::hosts-ergänzen.cmd 
02.
::ergänzt die lokale hosts-datei um weitere Einträge, ohne den Inhalt zu löschen 
03.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
04.
::Definition der Variablen 
05.
set hosts=%windir%\system32\drivers\etc\hosts 
06.
::Sicherung der vorhandenen hostsdatei erstellen 
07.
xcopy %hosts%  %WINDIR%\system32\drivers\etc\hosts.backup /y 
08.
 
09.
::zeilenweise die master-datei durchsuchen 
10.
for /f "tokens=1,2 delims=	" %%I in (hosts-master.txt) do @( 
11.
	find /i "%%I" %hosts% 
12.
	if %errorlevel% NEQ 0 echo %%I	%%J   >>%hosts%   
13.
14.
 
Mein problem ist nun, dass mein ERRORLEVEL niemals nicht 0 ist. Egal, ob in der hosts-datei der Eintrag drinsteht oder nicht.

Darüber stolpere ich gerade.

Kann mir hier bitte jemand dabei helfen, den Knick aus der Optik bekommen?

Vielen lieben Dank schonmal


Markus
Mitglied: bastla
24.08.2010 um 16:26 Uhr
Hallo kugman!

Du hast Dir von allen Möglichkeiten, denn Errorlevel zu verwenden, genau die ausgesucht, die in einer "for"-Schleife nicht ohne Weiteres funktioniert (Stichwort "delayedexpansion") ...

Gehen sollte es entweder mit
find /i "%%I" "%hosts%">nul || echo %%I	%%J   >>"%hosts%"
oder zur Not auch mit
01.
find /i "%%I" "%hosts%">nul 
02.
if errorlevel 1 echo %%I	%%J   >>%"hosts%"
[Edit]
Eigentlich sollte aber auch anstelle der Schleife ein
findstr /v /g:"%hosts%" "hosts-master.txt">>"%hosts%"
genügen.
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: kugman
24.08.2010 um 16:46 Uhr
Hallo bastla,

Vielen Dank für den Tipp!

na klasse - Jackpot! Ich geh nacher Lotto spielen.

jetzt fallen mir grad aber noch zwei sachen ein.

1.) ich muss in der hosts-datei zuerst ne neue Zeile einfügen, denn sonst ist im Zweifel mein Eintrag, den ich mit >> reinschiebe nicht in einer neuen Zeile, sondern hinter der letzten Zeile
2.) kann ich eigentlich auch Zeilen rausschmeißen?
Bitte warten ..
Mitglied: bastla
24.08.2010 um 17:00 Uhr
Hallo kugman!

Zu 1.)
Eine Leerzeile (bzw Zeilenschaltung) einfach per
echo\>>"%hosts%"
hinzufügen.

Zu 2.)
Ja

Ok, Du wirst vermutlich doch auch wissen wollen, wie das gehen könnte (Konjunktiv, weil noch immer ungetestet):
findstr /v /g:"Rausdamit.txt" "%hosts%">"%hosts%"
Die zu entfernenden Zeilen müssten dann natürlich in der "Rausdamit.txt" stehen ...

Grüße
bastla
Bitte warten ..
Mitglied: kugman
24.08.2010 um 17:04 Uhr
Hallo Bastla,
zu 1.) danke hat geklappt - nu macht er halt automatisch immer eine Zeilenschaltung, hab ich halt lauter Leerzeilen in der Datei, aber das ist eigentlich egal
zu 2.) klar - hätt ich ja eigentlich selber draufkommen können, denn dass das /v quasi mein Suchergebnis invertiert, weiss ich eigentlich... (das ist dann ja vielleicht auch die Lösung für 1.))

Grüße,

markus
Bitte warten ..
Mitglied: bastla
24.08.2010 um 17:15 Uhr
Hallo kugman!

1.) sollte ja nur einmal für jeden Rechner erforderlich sein (jedenfalls, wenn danach keine manuellen Änderungen mehr durchgeführt werden) - ansonsten eben einmalig am Beginn des Batches - oder, falls Du bei der "for"-Schleife bleibst, nur, wenn tatsächlich eine Ergänzung erfolgt - etwa so:
01.
set "Flag=" 
02.
for /f "tokens=1,2 delims=	" %%I in (hosts-master.txt) do @(  
03.
    find /i "%%I" "%hosts%">nul || ( 
04.
        if not defined Flag (set "Flag=True" & echo\>>"%hosts%") 
05.
        echo %%I	%%J   >>"%hosts%" 
06.
07.
)
Grüße
bastla
Bitte warten ..
Mitglied: DerSchorsch
24.08.2010 um 18:17 Uhr
nur mal so zum Verständnis:
warum nutzt du nicht einfach DNS?

Dank Domäne habt ihr ja schon mind. einen DNS-Server...
Bitte warten ..
Mitglied: kugman
25.08.2010 um 10:05 Uhr
das ist schon klar - wir nutzen auch DNS, allerdings kommt auch ein DNS irgendwo an seine Grenzen, weil ich in meinen (übrigens öffentlichen DNS) nicht für jede Domäne eine Zone anlegen kann/will...
Deshalb gibt es Fälle, in denen es einfacher ist, eine hosts-datei zu pflegen.

Logisch hab ich alles, was unsere eigenen Zonen angeht auch im DNS drin.
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...