manfredwerner
Goto Top

Netzlaufwerke nur verbinden wenn ein PC in einer bestimmten IP-Range ist

Hallo Forum,

ich möchte, dass die Netzlaufwerke nur verbunden werden, wenn sich ein Laptop in bestimmten IP-Ranges befindet.
Allerdings komme ich gerade nicht weiter.
Kann mir evt. jemand weiter helfen??
Das habe ich bis jetzt im script aber irgendwie ist es noch nicht OK

@echo off


set IP-Adress=FOR /F "tokens=5" %%a in ('netsh interface ipv4 show route ^| find "0.0.0.0/0"') do @FOR /F "tokens=2" %%A in ('netsh interface ipv4 show addresses %%a ^| find "IP-Ad"')do @echo %%A  
set R1=10.57.87.0/24
set R2=10.57.142.0/24
set R3=10.58.77.0/24
set R4=10.56.214.0/24
set R5=10.45.167.0/24
set R6=192.168.178.0/24

if /i $IP-Adress ==$R1  goto :netuse
if /i $IP-Adress ==$R2  goto :netuse
if /i $IP-Adress ==$R3  goto :netuse
if /i $IP-Adress ==$R4  goto :netuse
if /i $IP-Adress ==$R5  goto :netuse
if /i $IP-Adress ==$R6  goto :netuse


:netuse
net use x: \\centralfileserver02\it /persistent:no
net use y: \\localfileserver01\users /persistent:no
net use g: \\localfileserver01\groups /persistent:no
net use Z: \\10.56.214.2\groups /persistent:no

:ende
echo: Nicht im Firmen-Netz. Laufwerke werden nicht verbunden

pause

Content-Key: 373501

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

Printed on: April 26, 2024 at 13:04 o'clock

Member: SeaStorm
SeaStorm May 09, 2018 at 11:05:21 (UTC)
Goto Top
Hi

warum machste das nicht einfach per GPPs ? Da ist das an Bord
Member: Kraemer
Kraemer May 09, 2018 updated at 11:11:52 (UTC)
Goto Top
Zitat von @SeaStorm:
warum machste das nicht einfach per GPPs ? Da ist das an Bord
Was haben denn Geranylpyrophosphate damit zu tun?

@to - sieh dir das mal an: https://www.windowspro.de/wolfgang-sommergut/vergleich-gruppenrichtlinie ... *eine andere Interpretation von GPP face-wink
Mitglied: 136166
136166 May 09, 2018 updated at 11:15:10 (UTC)
Goto Top
Zitat von @Kraemer:
Was haben denn Geranylpyrophosphate damit zu tun?
Du bist im falschen Forum face-smile
Geranylpyrophosphat ist ein Biomolekül, das biosynthetisch durch eine Kopf-zu-###-Kondensation aus den beiden ...
Member: manfredwerner
manfredwerner May 09, 2018 at 12:35:35 (UTC)
Goto Top
Hallo SeaStorm

weil es nur um ganz wenige Endrgeräte geht und ich auf den Server auf dem die GPOs laufen keinen administrativen Zurgriff habe.
Eigentlich geht es nur darum, daß die mobielen Clients nicht versuchen die Netzlaufwerke zu mappen wenn diese nicht erreichbar sind.
dann dauert der login Vorgang einach zu lange. Erreichbar sind die Laufwerke im Beispiel oben unter R1 bis R6

Manfred
Member: SeaStorm
SeaStorm May 09, 2018 at 13:24:29 (UTC)
Goto Top
Du hast keinen Adminzugriff, aber darfst das Logonscript editieren ?!
Was zum ... egal ...


OK dann fange damit an, das man in Batchfiles Variablen nicht mit $ abruft ...

Dann ist dieses FOR Konstrukt ... naja das funktioniert halt weder syntaktisch als Befehl, noch ergibt das einen grossen Sinn, wenn man ansieht was das machen soll. Was genau willst du damit erreichen? Du suchst doch eigentlich nur die IP Adresse des Clients und schaust ob das in einem der bekannten Netze ist.

Dann durchläuft dein Script auf jeden fall IMMER in den den :netuse und dann in den :ende part. Egal wie.
Entweder du baust dir hier ein echtes :ende, was dann am Ende ist, und springst da als "jetzt Script beenden" rein, oder du nutzt gleich das korrekte :EOF

Und dein vorhandenes :ende ist ja kein ENDE sondern ein KEINNETZWERKGEFUNDEN.


Was du da erreichen willst ist fachlich zwar eine Kleinigkeit (sowie fachlich fragwürdig) und ich könnte das jetzt hier kurz pasten, aber ich denke bei dir fehlt es an grundlegendem Verständnis von Batchfiles.
Deshalb werde ich dir zwar gerne im einzelnen Weiterhelfen, aber überlegen musst du schon selbst.
Member: aqui
aqui May 09, 2018 updated at 13:58:30 (UTC)
Goto Top
Aufs Netzwerk warten abschalten. Dann gehts auch schneller mit der Anmeldung face-wink
https://www.windows-faq.de/2017/10/19/beim-neustarten-des-computers-und- ...
Member: manfredwerner
manfredwerner May 09, 2018 updated at 16:32:14 (UTC)
Goto Top
danke ... face-smile
ja du hast Recht ... mein Verständlis von Batchfiles ist nocht so dolle. Trotzdem möchte ich das Sript schreiben und es wäre nett wenn du mir helfen würdest:
Also die Variablen werden also mit "%Variablenname%" aufgerufen (bei der Linux Bash war es $Varaiablennname)

Ich fang dann mal oben an....:

hast du für das Auslesender IP-Adresse des Clients eine bessere Möglichkeit?
Ich wollte jetzt mit :

FOR /F "tokens=5" %%a in ('netsh interface ipv4 show route ^| find "0.0.0.0/0"') do @FOR /F "tokens=2" %%A in ('netsh interface ipv4 show addresses %%a ^| find "IP-Ad"')do @echo %%A>C:\%homepath%\Downloads\IP.txt  

die Adresse in eine Datei schreiben und dann diesen Wert als Variable setzen.

ungefähr so:

set IP-Adress=C:\%homepath%\Downloads\IP.txt

dann den Wert Range die abgefragt werden soll als Variable setzen

set R1=10.57.87.*   

hierzu gleich mal eine Frage: wird der Wert in " " geschrieben? ich glaube nicht und ist der * als Wildcard zulässig?

Jetzt zur if Abfrage

if /i "%IP-Adress%"=="%R1%"  goto :netuse(  
	) else goto :A1

         :A1
         if /i "%IP-Adress%"=="%R1%"  goto :netuse(  
	                ) else  goto :eof
hier wollte ich eigentlich nur den Sprung :netuse machen wenn der Wert der ersten 3 Blöcke übereinstimmt sonst soll die nächste Range abgefragt werden. z.B mit der Sprungmarke :A1
Member: aqui
aqui May 09, 2018 at 15:32:57 (UTC)
Goto Top
Ich wollte jetzt mit :
Besser hier mit den Code Tags arbeiten...ist übersichtlicher face-wink
Member: manfredwerner
manfredwerner May 09, 2018 at 16:33:10 (UTC)
Goto Top
so besser??
Member: Matsushita
Matsushita May 10, 2018 at 07:35:01 (UTC)
Goto Top
Bau doch einen Trigger für 'ne geplante Aufgabe ....
Member: SeaStorm
Solution SeaStorm May 10, 2018 updated at 15:25:07 (UTC)
Goto Top
besser face-smile

Sternchen als Wildcard geht hier nicht. Da musst du mit hilfen arbeiten.
@echo off
FOR /F "tokens=5" %%a in ('netsh interface ipv4 show route ^| find "0.0.0.0/0"') do @FOR /F "tokens=2" %%A in ('netsh interface ipv4 show addresses %%a ^| find "IP-Ad"')do set ip4=%%A  

@echo %ip4% | find "192.168.17."  
if %errorlevel% == 0 ( echo 17found )

@echo %ip4% | find "192.168.178."  
if %errorlevel% == 0 ( echo 178found )

so z.B.
Pipe die gefundene IP in das find und gucke ob in der IP der vergleichswert des Netzes vorkommt.
Nicht wirklich 100% präzise, aber sollte deinen Anforderungen genügen.

Wenn du das genauer haben willst, solltest du das dringend in Powershell umsetzen.


hast du für das Auslesender IP-Adresse des Clients eine bessere Möglichkeit?
per CMD (und ohne Dritt-Programme) hat man eigentlich immer diverse Probleme. Mehrere Netzwerkkarten, Virtuelle Adapter, schlechte Vergleichsmöglichkeiten usw. Ich habe es bisher immer per PING gemacht:
for /f "delims= tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do set ip4=%%a  
Aber auch das ist nicht der heilige Gral. So kann ich hier z.B auch nicht ohne zusätzlichen Aufwand prüfen ob es sich um das korrekte Subnet handelt. Muss man sich auch wieder zusammenfriemeln. Wüsste spontan nicht wo ich sowas noch benötige. Selbst wenn, dann würde ich das per PS lösen
Member: manfredwerner
manfredwerner May 11, 2018 at 12:51:03 (UTC)
Goto Top
Hallo SeaStorm


so läuft es jetzt face-smile

@echo off

set R1=10.57.87.
set R2=10.57.142.
set R3=10.58.77.
set R4=10.56.214.
set R5=10.45.167.


for /f "delims= tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do set ip4=%%a  

@echo %ip4% | find "%R1%"  
if %errorlevel% == 0 (goto :netuse)

@echo %ip4% | find "%R2%"  
if %errorlevel% == 0 (goto :netuse)

@echo %ip4% | find "%R3%"  
if %errorlevel% == 0 (goto :netuse)
		
@echo %ip4% | find "%R4%"  
if %errorlevel% == 0 (goto :netuse)
				
@echo %ip4% | find "%R5%"  
if %errorlevel% == 0 (goto :netuse) else (goto :EOF)
	
:netuse
net use x: \\centralfileserver02\it /persistent:no
net use y: \\localfileserver01\users /persistent:no
net use g: \\localfileserver01\groups /persistent:no
net use Z: \\10.56.214.2\groups /persistent:no
net use S: \\localfileserver01\softwareinst /persistent:no
net use F: \\localfileserver01\apps /persistent:no

:EOF

Vielen Dank fürs Helfen beim Nachdenken face-wink

Manfred