WinFuture-Forum.de: Skript Für Netzlaufwerk Verbinden - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Skript Für Netzlaufwerk Verbinden Skript um Netzlaufwerk bei Bedarf verbinden bzw. löschen


#1 Mitglied ist offline   Matinko 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 14. Oktober 07
  • Reputation: 0

  geschrieben 13. August 2010 - 08:32

Hallo Zusammen

Ich habe ein kleines Skript geschrieben, welches erstmal suboptimal funktioniert. Es verbindet einen Server wenn er erreichbar ist als Y: oder löscht dieses Netzlaufwerk falls er nicht erreichbar ist.

Bei drei Sachen weiß aber nicht weiter:

1. Wenn der Server pingbar ist, prüfe ich im Moment nur ob das Laufwerk Y: existiert und gehe davon aus, dass dieser Buchstabe mit genau diesem Server verknüpft ist. (zweite if) Eigentlich müsste ich aber prüfen ob der Server auch wirklich auf Y: gemappt ist. Könnte ja auch ein USB Stick auf Y: sein?! Weiß jemand, wie es möglich ist zu prüfen, ob ein Server auf ein bestimmtes logisches Laufwerk gemappt ist?

2.Wenn der Server nicht pingbar ist, funktioniert das Skript nur beim ersten Durchlauf zufriedenstellend. Denn beim zweiten Durchlauf ist Y: ja schon gelöscht worden. Ich bekomme dann die Fehlermeldung:

Zitat

the Network connection could not be found

Ich weiß aber im Moment nicht wie ich das verbessern kann.

3. Dann noch eine weitere Frage am Rande. Kann man das Skript aufgrund einer Änderung des Netzwerkes automatisch starten? Also wenn ich den Netzwerkstecker rausziehe, soll das Skript loslaufen?


@ECHO Off

set UserID=xyz
set Password=xyz
set FileserverMount=y:
set FileserverIP=xx.yy.zzz.zzz
set FileserverFreigabe=xyz


ping %FileserverIP%>nul

if "%errorlevel%"=="0"   (
		 echo Die Fileserver-IP "%FileserverIP%" ist erreichbar.
		 if exist %FileserverMount%\NUL (
					 echo "%FileserverMount%\" ist bereits verbunden.
					 echo Keine Žnderungen vorgenommen.
					 ) ELSE   (
						echo "%FileserverMount%\" ist nicht verbunden.
						C:\winnt\system32\net.exe use %FileserverMount% \\%FileserverIP%\%FileserverFreigabe% /USER:%UserID% %Password%
						If "%errorlevel%"=="0"   (
								 echo "%FileserverMount%\" wurde verbunden
								 )
						)
		 )

IF "%errorlevel%"=="1"   (
		 echo Die Fileserver-IP "%FileserverIP%" ist nicht erreichbar.
		 C:\winnt\system32\net.exe use %FileserverMount% /DELETE
		 echo "%FileserverMount%\" wurde getrennt.
		 )			


			   

pause


Vielen Dank

Ich bin für jeden Rat dankbar.
Gruß Matinko
0

Anzeige



#2 Mitglied ist offline   hoschen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 748
  • Beigetreten: 12. Februar 04
  • Reputation: 2

geschrieben 13. August 2010 - 08:42

zu 1. entweder eine bestimmte Datei prüfen, die es auf Y: gibt, oder mit "net use y:" die Ausgabe auf den Server prüfen!

zu 2. "if exist %FileserverMount%\NUL" einbauen
0

#3 Mitglied ist offline   Matinko 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 14. Oktober 07
  • Reputation: 0

geschrieben 16. August 2010 - 19:56

Vielen Dank für den Input.

zu 1. habe ich es so gemacht wie du gesagt hast. Mir fiel leider nix besseres ein als die Ausgabe des net use mittels der findstr zu durchsuchen. Ich weiß nicht ob das schlechtes programmieren ist, aber es funktioniert. Was meint ihr?
net use %FileserverMount% |findstr "%FileserverIP%">nul
IF "%errorlevel%"=="0" ECHO scheinbar ist das Laufwerk Y: mit dem richtigen Server verbunden.

Merci dafür!

zu 2. Noch ein
If exist %FileserverMount%\NUL

hat nicht so richtig funktioniert. Denn scheinbar kann exist auch nur zwischen dem Zustand pingbar oder nicht pingbar unterscheiden. Ich wollte aber im Falle eines nicht pingbaren Servers prüfen, ob der Explorer immer noch das Laufwerk Y: anzeigt. Das verlangsamt Windows ungemein weil der Explorer versucht ständig wieder neu zu verbinden.

Die Lösung war ähnlich zu 1.
net use %FileserverMount% |findstr "Disconnected">nul
IF "%errorlevel%"=="0" ECHO Der Explorer versucht das Laufwerk Y: mit dem Server zu verbinden.


Insgesamt ergeben sich aus allen möglichen Zuständen eine Menge Kombinationen.
Diese If If If If Programmierung finde ich unübersichtlich.

Gibt es eine Fallunterscheidung If Case die besser geeignet ist?

@ECHO Off

set UserID=xyz
set Password=xyz
set FileserverMount=y:
set FileserverIP=xx.yy.zzz.zzz
set FileserverFreigabe=xyz

set PingResult=false
set RightMountResult=false
set ConnectedResult=false
set MountExistsResult=false


PING %FileserverIP%>nul
IF "%errorlevel%"=="0" (SEt PingResult=true) ELSE (SET PingResult=false)

net use |findstr "%FileserverMount%">nul
IF "%errorlevel%"=="0" 	(
		
			SET MountExistsResult=true

			net use %FileserverMount% |findstr "%FileserverIP%">nul
			IF "%errorlevel%"=="0" (SEt RightMountResult=true) ELSE (SET RightMountResult=false)
				
			net use %FileserverMount% |findstr "Disconnected">nul
			IF "%errorlevel%"=="0" (SEt ConnectedResult=true) ELSE (SET ConnectedResult=false)
				
			)


echo %PingResult%
echo %MountExistsResult%
echo %RightMountResult%
echo %ConnectedResult%  




rem PingResult			  0
rem MountExistsResult	0
rem RightMountResult		 0
rem ConnectedResult		 0	   nichts

if "%PingResult%"=="false" if "%MountExistsResult%"=="false" if "%RightMountResult%"=="false" if "%ConnectedResult%"=="false" (
ECHO Der Server: %FileserverIP% ist nicht pingbar.
ECHO %FileserverMount%/ existiert nicht.
ECHO Kein Žnderungen vorgenommen.
)


rem PingResult			 0
rem MountExistsResult	1
rem RightMountResult		 0
rem ConnectedResult		 0	   nichts weil y mit anderem laufwerk verbunden sein könnte

if "%PingResult%"=="false" if "%MountExistsResult%"=="true" if "%RightMountResult%"=="false" if "%ConnectedResult%"=="false" (
ECHO Der Server: %FileserverIP% ist nicht pingbar.
ECHO %FileserverMount%/ existiert ist aber nicht mit dem Server: %FileserverIP% verbunden.
ECHO Kein Žnderungen vorgenommen.
ECHO Bitte prüfen ob %FileserverMount%/ anderweitig verwendet wird.
)


rem PingResult			 0
rem MountExistsResult	1
rem RightMountResult		 1
rem ConnectedResult		 0	   nichts

if "%PingResult%"=="false" if "%MountExistsResult%"=="true" if "%RightMountResult%"=="true" if "%ConnectedResult%"=="false" (
ECHO Der Server: %FileserverIP% ist nicht pingbar.
ECHO %FileserverMount%/ existiert ist aber nicht mit dem Server: %FileserverIP% verbunden.
ECHO Kein Žnderungen vorgenommen.
)


rem PingResult			0
rem MountExistsResult	1
rem RightMountResult		 1
rem ConnectedResult		 1	   trennen


if "%PingResult%"=="false" if "%MountExistsResult%"=="true" if "%RightMountResult%"=="true" if "%ConnectedResult%"=="true" (
ECHO Der Server: %FileserverIP% ist nicht pingbar.
ECHO %FileserverMount%/ existiert und ist mit dem Server: %FileserverIP% verbunden.
ECHO %FileserverMount%/ wird getrennt.
net use %FileserverMount% /DELETE
)


rem PingResult			 1
rem MountExistsResult	1
rem RightMountResult		 1
rem ConnectedResult		 1	   nichts


if "%PingResult%"=="true" if "%MountExistsResult%"=="true" if "%RightMountResult%"=="true" if "%ConnectedResult%"=="true" (
ECHO Der Server: %FileserverIP% ist pingbar.
ECHO %FileserverMount%/ existiert und ist bereits mit dem Server: %FileserverIP% verbunden.
ECHO Kein Žnderungen vorgenommen.
)


rem PingResult			1
rem MountExistsResult	0
rem RightMountResult		 0
rem ConnectedResult		 0	   verbinden


if "%PingResult%"=="true" if "%MountExistsResult%"=="false" if "%RightMountResult%"=="false" if "%ConnectedResult%"=="false" (
ECHO Der Server: %FileserverIP% ist pingbar.
ECHO %FileserverMount%/ existiert nicht.
ECHO %FileserverMount%/ wird verbunden.
net use %FileserverMount% \\%FileserverIP%\%FileserverFreigabe% /USER:%UserID% %Password% /PERSISTENT:NO
)


rem PingResult			1
rem MountExistsResult	1
rem RightMountResult		 0
rem ConnectedResult		 0	   nichts weil y mit anderem laufwerk verbunden sein könnte

if "%PingResult%"=="true" if "%MountExistsResult%"=="true" if "%RightMountResult%"=="false" if "%ConnectedResult%"=="false" (
ECHO Der Server: %FileserverIP% ist pingbar.
ECHO %FileserverMount%/ existiert ist aber nicht mit dem Server: %FileserverIP% verbunden.
ECHO Kein Žnderungen vorgenommen.
ECHO Bitte prüfen ob %FileserverMount%/ anderweitig verwendet wird.
)

rem PingResult			1
rem MountExistsResult	1
rem RightMountResult		 1
rem ConnectedResult		 0	   verbinden

if "%PingResult%"=="true" if "%MountExistsResult%"=="true" if "%RightMountResult%"=="true" if "%ConnectedResult%"=="false" (
ECHO Der Server: %FileserverIP% ist pingbar.
ECHO %FileserverMount%/ existiert ist aber nicht mit dem Server: %FileserverIP% verbunden.
ECHO %FileserverMount%/ wird verbunden.
net use %FileserverMount% \\%FileserverIP%\%FileserverFreigabe% /USER:%UserID% %Password% /PERSISTENT:NO
)




pause


zu 3. Hat noch jemand eine Idee wie ich das Skript automatisch laufen lassen kann, wenn sich der Netzwerkstatus ändert. Ich habe irgendwo gelesen es geht wohl sobald der Rechner eine neue IP bezieht. Kann einer helfen?

Gruß Matinko

Dieser Beitrag wurde von Matinko bearbeitet: 16. August 2010 - 20:09

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0