samtrex
Goto Top

Netzwerkerkennung per Batch

Hallo mal wieder!

Ich habe folgendes Problem:
Ich sitze an einem XP Pro Rechner in einem kleinen Netzwerk. Für die Anmeldung habe ich mir ein Batchfile gebastelt, welches mir meine Laufwerke wenn vorhanden verbindet.
Jetzt kommt es aber vor, das ich mit dem Rechner auch mal das Netzwerk wechsle.

Habe jetzt mal etwas rumprobiert...
Abfrage des Standartgateway via IPCONFIG

Um das Netzwerk in meinem Batch zu identifizieren... Allerdings finde ich die identifikation per IP nicht so richtig gut.
Kann ich nicht irgendwie den Router per MAC identifizieren? Denn der Standartgateway kann ja u.U. gleich sein.
Zudem gehe ich mal per Kabel mal per WLAN online.

Danke schon mal für die Hilfe!

MfG Sam

Content-Key: 32382

Url: https://administrator.de/contentid/32382

Printed on: April 19, 2024 at 21:04 o'clock

Member: filippg
filippg May 14, 2006 at 19:09:05 (UTC)
Goto Top
Hallo,

ein Auslesen der IP-Adresse des Standardgateways hast du bereits? Dann kannst du in der ARP-Tabelle anhand der IP-Adresse die MAC-Adresse des Standardgateways herausbekommen, der Befehl heisst einfach "arp". Um sicherzustellen, dass ein entsprechender Eintrag für das Gateway vorhanden ist (Einträge in die Tabelle werden erst bei Bedarf vorgenommen und in regelmässigen Abständen wieder gelöscht) solltest du das Gateway vorher nochmal pingen.

Filipp
Member: superboh
superboh May 15, 2006 at 00:01:05 (UTC)
Goto Top
Hi,

ich hab mir so was auch mal "gebastelt". Allerdings viel einfacher gestrickt:

--- schnipp ---
@echo off
if exist "\\Winserver1\home" goto Verbinden
if not exist "\\Winserver1\home" goto Trennen
goto Ende

:Verbinden
net use h: \\Winserver1\home\thomas
net use k: \\Winserver1\daten
net use m: \\Winserver1\bilder
goto Ende

:Trennen
net use h: /delete
net use k: /delete
net use m: /delete
goto Ende

:Ende
exit
--- schnipp ---

Die Batch liegt im Autostart und wenn die Freigabe "home" auf dem Server mit dem Namen "Winserver1" gefunden wird, werden die Laufwerke verbunden, andernfall getrennt (falls noch vorhanden).
Dass es in einem andern Netz einen gleichen Server mit gleicher Freigabe gibt ist unwahrscheinlich.
Die Batch funktioniert egal ob ich per Kabel oder WLan verbunden bin.

Gruß,
Thomas
Member: SamTrex
SamTrex May 15, 2006 at 07:35:59 (UTC)
Goto Top
Hallo nochmal und danke für die Vorschläge! Die Sache mit ARP ist genau das was ich gesucht habe!

Als kleine jedoch lange Info hab ich die Batch mal angehängt.
Ist für 3 User bei uns z.H. und für den Systemstart oder zwischendurch parametrierbar.
Falls jemand noch grundsäzliches an Tipps hat..... Bitte!

Danke nochmal!

MfG Sam


@echo OFF

:: NETZWERKKONFIGURATIONS-BATCH
:: NETZWERK: LNWA
:: v5.4

:: --------------------------------------------------PARAMETERCHECK

IF "%1"=="" (GOTO HELP)
IF /I "%1"=="DIRK" (GOTO CHECK_P2)
IF /I "%1"=="HATHOR" (GOTO CHECK_P2)
IF /I "%1"=="PEACEMAKER" (GOTO CHECK_P2)
GOTO HELPIP1

:CHECK_P2
IF NOT "%2"=="" (IF /I NOT "%2"=="SYSTEMSTART" (GOTO HELPIP2))
SET P1=%1
SET P2=%2

:: --------------------------------------------------START

IF /I "%P2%"=="SYSTEMSTART" title Warte auf Dienste ...
IF /I "%P2%"=="SYSTEMSTART" SLEEP 10
IF /I "%P2%"=="SYSTEMSTART" title Vorhandene Netzwerkverbindungen
NET USE /p:no >NUL
IF /I "%P2%"=="" (IF /I "%P1%"=="DIRK" (FOR %%i IN (B L M N O P Q R S T U) DO NET USE %%i: /del >NUL 2>NUL))
IF /I "%P2%"=="" (IF /I "%P1%"=="HATHOR" (FOR %%i IN (N O P Q) DO NET USE %%i: /del >NUL 2>NUL))
IF /I "%P2%"=="" (IF /I "%P1%"=="PEACEMAKER" (FOR %%i IN (N O P Q) DO NET USE %%i: /del >NUL 2>NUL))

:: --------------------------------------------------INTERNET PR?FEN

title Internet prfen ...
ping www.google.de -n 1 -w 100 >NUL 2>NUL
if not errorlevel 1 (SET INTERNET= Internet: OK) ELSE (SET INTERNET= Internet: N/A)
if not errorlevel 1 goto PROGRAMME
if errorlevel 1 goto LNWA

:PROGRAMME
IF /I "%P1%"=="DIRK" (TASKLIST |FIND /I "TRILLIAN.EXE" >NUL 2>NUL)
IF /I "%P1%"=="DIRK" (IF "%ERRORLEVEL%"=="1" (IF EXIST C:\Programme\Trillian\Trillian.exe (START /B C:\Programme\Trillian\Trillian.exe)))

:: --------------------------------------------------LAUFWERKE VERBINDEN

:LNWA
IF /I "%P1%"=="DIRK" (IF /I "%P2%"=="SYSTEMSTART" (IF EXIST E:\Memo.txt (START MEMO.EXE show 2>NUL)))
title LNWA: Laufwerke werden verbunden


:: MEDIACENTER

SET MEDIACENTER= Laufwerke an MediaCenter:
ping 192.168.0.3 -n 1 -w 1 >NUL 2>NUL
if "%errorlevel%"=="1" (goto MEDIACENTER_ENDE)
IF /I "%P1%"=="DIRK" (NET USE B: \\192.168.0.3\Verwaltung >NUL 2>NUL) & (DIR B: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET MEDIACENTER=%MEDIACENTER% Bface-smile)
NET USE N: \\192.168.0.3\Eingehend >NUL 2>NUL & (DIR N: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET MEDIACENTER=%MEDIACENTER% Nface-smile)
NET USE O: \\192.168.0.3\Auditorium >NUL 2>NUL & (DIR O: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET MEDIACENTER=%MEDIACENTER% Oface-smile)
NET USE P: \\192.168.0.3\Theater >NUL 2>NUL & (DIR P: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET MEDIACENTER=%MEDIACENTER% Pface-smile)
NET USE Q: \\192.168.0.3\Lektorat >NUL 2>NUL & (DIR Q: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET MEDIACENTER=%MEDIACENTER% Qface-smile)
:MEDIACENTER_ENDE
IF /I "%MEDIACENTER%"==" Laufwerke an MediaCenter:" (SET MEDIACENTER=)

:: ONLINESERVER

SET ONLINESERVER= Laufwerke an OnlineServer:
ping 192.168.0.4 -n 1 -w 1 >NUL 2>NUL
if "%errorlevel%"=="1" (goto ONLINESERVER_ENDE)
IF /I "%P1%"=="DIRK" (NET USE L: \\192.168.0.4\Web >NUL 2>NUL) & (DIR L: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET ONLINESERVER=%ONLINESERVER% Lface-smile)
IF /I "%P1%"=="DIRK" (NET USE M: \\192.168.0.4\Intern >NUL 2>NUL) & (DIR M: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET ONLINESERVER=%ONLINESERVER% Mface-smile)
SET LASER= HP LaserJet 1100 ist verfgbar
:ONLINESERVER_ENDE
IF /I "%ONLINESERVER%"==" Laufwerke an OnlineServer:" (SET ONLINESERVER=)

:: NOTEBOOK

IF /I NOT "%P1%"=="DIRK" (GOTO NOTEBOOK_ENDE)
SET NOTEBOOK= Laufwerke an NoteBook:
ping 192.168.0.5 -n 1 -w 1 >NUL 2>NUL
if "%errorlevel%"=="1" (goto NOTEBOOK_ENDE)
NET USE R: \\192.168.0.5\C$ >NUL 2>NUL & (DIR R: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET NOTEBOOK=%NOTEBOOK% Rface-smile)
NET USE S: \\192.168.0.5\D$ >NUL 2>NUL & (DIR S: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET NOTEBOOK=%NOTEBOOK% Sface-smile)
:NOTEBOOK_ENDE
IF /I "%NOTEBOOK%"==" Laufwerke an NoteBook:" (SET NOTEBOOK=)

:: HP PSC 2610

ping 192.168.0.10 -n 1 -w 1 >NUL 2>NUL
if "%errorlevel%"=="1" (goto HPPSC_ENDE)
IF /I "%P1%"=="DIRK" (NET USE K: \\192.168.0.10\memory_card >NUL 2>NUL & (DIR K: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET HPPSC= Laufwerke an HP PSC 2610: Kface-smile))
IF /I NOT "%P1%"=="DIRK" (SET HPPSC= HP PSC 2610 ist verfgbar)
:HPPSC_ENDE


:: --------------------------------------------------NETZWERK?BERSICHT

title Netzwerkstatus I %DATE% I %TIME:~0,5% I
cls
echo.
echo Eingerichtet fr: %P1%
IF DEFINED P2 (echo Typ: %P2%)
echo.
echo.
IF DEFINED INTERNET (echo %INTERNET%)
echo.
IF DEFINED MEDIACENTER (echo %MEDIACENTER%)
IF DEFINED ONLINESERVER (echo %ONLINESERVER%)
IF DEFINED NOTEBOOK (echo %NOTEBOOK%)
IF DEFINED SILVERFOX (echo %SILVERFOX%)
echo.
echo.
IF DEFINED HPPSC (echo %HPPSC%)
IF DEFINED LASER (echo %LASER%)
echo.
SLEEP 15
GOTO :EOF


:HELPIP1
cls
echo.
echo Parameter [1] wurde entweder falsch angegeben,
echo oder ist nicht in der Liste unter USERNAME eingetragen!
GOTO HELP

:HELPIP2
cls
echo.
echo Parameter [2] wurde falsch angegeben!
GOTO HELP

:HELP
echo.
echo Syntrax: LNWA [1] [2]
echo.
echo [1] USERNAME
echo [DIRK]
echo [HATHOR]
echo [PEACEMAKER]
echo.
echo [2] [SYSTEMSTART]
echo.
echo Soll die Anwendung im laufenden Betrieb starten,
echo entf?llt [2].
echo.
PAUSE >NUL
GOTO :EOF
Member: Biber
Biber May 15, 2006 at 08:37:53 (UTC)
Goto Top
Moin SamTrex,

kleiner Verbesserungsvorschlag:

Alle Sequenzen
... & (IF "%ERRORLEVEL%"=="0" (
kannst und musst Du kürzer schreiben als simples
&&

Beispiel hier:
NET USE P: \\192.168.0.3\Theater >NUL 2>NUL & (DIR P: >NUL 2>NUL) & (IF "%ERRORLEVEL%"=="0" (SET MEDIACENTER=%MEDIACENTER% Pface-smile)

> das letzte IF "%ERRORLEVEL%"=="0" ...würde den Errorlevelwert zu Beginn der Zeile, vor Start des NET USE-Kommandos liefern.
Das willst Du aber nicht, sondern Du meintest ja den Errorlevelwert der DIR-Anweisung.

Also besser so:
NET USE P: \\192.168.0.3\Theater >NUL 2>NUL & (DIR P: >NUL 2>NUL) && SET MEDIACENTER=%MEDIACENTER% P:

Grüße
Biber
Member: SamTrex
SamTrex May 15, 2006 at 15:15:26 (UTC)
Goto Top
Hallo Biber,
Das && steht demnach für wenn Fehlerfrei ausgeführt dann.... Seh ich das richtig?

Besten Dank für den Tipp!
Member: Biber
Biber May 15, 2006 at 16:21:27 (UTC)
Goto Top
Jepp, SamTrex

&& bedeutet "logisches UND", sprich: der vorangegangene Befehl muss OHNE Fehler, mit Errorlevel 0 beendet worden sein.


Das einfache "&" wie von Dir verwendet, beinhaltet gar keine logische Verknüpfung, sondern heißt soviel wie "mache danach auf jeden Fall..."
Also egal, ob der voran gegangene Befehl erfolgreich war oder ins Mett gehauen hat.

Grüße
Biber
Member: SamTrex
SamTrex May 16, 2006 at 20:04:38 (UTC)
Goto Top
Hallo Biber,
ich habe da leider doch ein kleines Problem mit der Umsetzung von dem &&.

Wenn ich jetzt den Router auf MAC checken will habe ich folgendes geschrieben:

(PING xxx.xxx.xxx.xxx >NUL 2>NUL) && (ARP -a xx-xx-xx-xx-xx-xx |FIND /I "xx-xx-xx-xx-xx-xx") && (SET LAN=EXTERN)

Wenn ich den Befehl so in der Batch laufen lasse wird der Parameter %LAN% nie gesetzt.
Woran liegt das???

Besten Dank
Sam
Member: Biber
Biber May 17, 2006 at 06:28:12 (UTC)
Goto Top
Moin SamTrex,

Du musst, wenn dieser Oneliner in einem Batch ist, das Pipe-Zeichen ("|") maskieren.
&& (ARP -a xx-xx-xx-xx-xx-xx ^|FIND /I "xx-xx-xx-xx-xx-xx") && ...

Gruß
Biber
Member: SamTrex
SamTrex May 17, 2006 at 16:00:52 (UTC)
Goto Top
...das Pipe-Zeichen ("|") maskieren.
&& (ARP -a xx-xx-xx-xx-xx-xx ^|FIND /I "xx-xx-xx-xx-xx-xx") && ...

Hm, ich hatte da einen kleinen Fehler in meiner Beschreibung, wie mir gerade aufgefallen ist. Es heißt: ...&& (ARP -a |FIND /I "xx-xx-xx-xx-xx-xx") && ....

In diesem Fall dann: ...&& (ARP -a ^|FIND /I "xx-xx-xx-xx-xx-xx") && ....
Wenn ich das so als Batch laufen lasse beschwert sich ARP.

???
Aber danke für Deine Geduld Biber!

Gruß Sam