tsukisan
Goto Top

Mit VBS Laufwerk automatisch bei Systemstart verbinden

Wie man automatisch einen Freigabepfad mounten kann in VBS

Hallo zusammen,

da ich öfters schon Anfragen im Netz gefunden hatte, wie man z.Bsp.: "net use..." in VBS nutzt, möchte ich gern mal einen Tipp schreiben, wie man so etwas programmieren könnte.
Mögliche Aufgabenstellung: Kleines Netzwerk mit einigen PCs, ein Server mit dem Freigabeordner, auf den die anderen PCs täglich zugreifen müssen. Der Freigabeordner hat seinen Freigabenamen - nennen wir ihn mal "Public" - für "Öffentlich".
Die Subnetmaske ist 255.255.255.0
Man kann diesen späteren Script in den Autostart-Ordner legen und somit wird dieser bei jedem neuen Booten aufgerufen.
Müßte aber nur einmal aufgerufen werden, da das mounten hier "persistent" erfolgt.

1) Öffne den Texteditor und füge folgenden Code ein:
On Error Resume Next

PfadStr = inputbox("Bitte geben Sie den Namen von der Freigabe ein",,"Public")  

set Winsock1=WScript.CreateObject("MSWinsock.Winsock", "WS_")   
Wscript.Echo "Eigene IP ist:" &  Winsock1.localip  

dim Zaehler
Zaehler = 0
AdrTemp = ""  
EigeneIP = Winsock1.localip

for i = 1 to len(winsock1.localip)
	a = mid(winsock1.localip,i,1)
	AdrTemp = AdrTemp & a
	if a = "." then   
		select Case Zaehler
		case 0
			'Wscript.Echo Zaehler  
			St1 = AdrTemp
			AdrTemp = ""  
			Zaehler = Zaehler + 1
		case  1
			'Wscript.Echo Zaehler  
			St2 = AdrTemp
			AdrTemp = ""  
			Zaehler = Zaehler + 1
		case  2
			'Wscript.Echo Zaehler  
			St3 = AdrTemp
			AdrTemp = ""  
			Zaehler = Zaehler + 1
		end select
	end if
	
next


Zaehler = 0

strTarget = St1 & St2 & St3 

  
Set objShell = CreateObject("WScript.Shell")  
  
'Do Until InStr(strPingResults, "reply from")   
	for i = 0 to 254 step 1
 	
	Zaehler = i
	AktIP = strTarget & Zaehler


  	Set objExec = objShell.Exec("ping -n 1 -w 1000 " & AktIP)  
   	strPingResults = LCase(objExec.StdOut.ReadAll)
	
	if InStr(strPingResults, "reply from") then  
		Wscript.Echo AktIp & " antwortet."  
	else
		Wscript.Echo AktIp & " antwortet nicht."  
	end if
	

	if InStr(strPingResults, "reply from")   then 	  
		if  eigeneIP = AktIP then
			Wscript.Echo AktIP & " ist eigene IP."  
		else
			set shell = CreateObject("WScript.Shell")  
			shell.run "net use Z: \\" & AktIp & "\" & PfadStr & " Passwort /user:USER /y",0  
			Wscript.Sleep 5000

			Set objFSO = CreateObject("Scripting.FileSystemObject")  
			If objFSO.FolderExists("\\" & AktIp & "\" & PfadStr) Then  
    				Wscript.echo  AktIP & " ist unter Z:\\" & AktIp & "\" & PfadStr & " gemountet."  
				Wscript.Quit
			Else
    				Wscript.Echo AktIP & " gesuchter Netzwerkpfad existiert aber nicht."  
			End If

		end if
	end if

	if Zaehler = 254 then
	 	msgbox "Konnte den Netzwerkpfad nicht finden.Script wird beendet."  
	 	WScript.Quit
	end if
	next
'Loop  


set objshell = nothing
set objExec = nothing
set shell = nothing
2) dann diese Datei als *.vbs abspeichern. z.Bsp.: Mount.vbs.
Das ganze am besten unter "C:\" abspeichern. Warum? Komme ich direkt dazu!
Wenn die Ping-Abfrage aus VBS kommt, geht jedes Mal ein Fenster auf. Das kann nerven. Muß es aber nicht.
Mich stört es.
Also erstellen wir uns noch eine Batchdatei und öffnen nochmals den Texteditor und geben diesmal
folgenden Code ein:
@Echo Off
cscript C:\Mount.vbs
pause
Diese Datei nun abspeichern an einem Platz des Vertrauens und in *.bat bennen. Z.Bsp.: "Mount.bat"
Doppelklickt man auf diese, dann öffnet die Batchdatei die VBSDatei und ich bekomme ein Eingabefenster, welches
mir ständig anzeigt, was gerade ausgeführt wird. Ist etwas besser, als ständig auf- und zugehende Fenster.
Kann nervös machen face-wink

Soweit meiner erster Tipp hier im Forum! Bin für jegliche Kritik offen, da man ja erstens dazulernen möchte und zweitens, wenn
man besser wird im "Tippen" kann man anderen - Hilfesuchenden - besser helfen.

In diesem Sinne

Gruß
Tsuki

Content-Key: 119549

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

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

Mitglied: 60730
60730 Jul 01, 2009 at 20:20:07 (UTC)
Goto Top
Servus,

eigentlich bin ich ja absoluter "hasser" von Kommentaren in Anleitungen und Tipps face-wink - aber weil du so nett drum bittest face-wink

Bin für jegliche Kritik offen,
schreib lieber:
Bin für jegliche konstruktive Kritik offen...

und damit wären wir schon beim Thema - dein Script läuft nur auf englischen Systemen
also u.A auch
56. if InStr(strPingResults, "TTL") then
obwohl -ganz ehrlich - nur weil ein System anpingbar ist - bedeutet das noch lange nicht, dass auch der Serverdienst / der Share da ist. Vielleicht das script so verändern face-wink

Gruß
Member: TsukiSan
TsukiSan Jul 02, 2009 at 01:43:17 (UTC)
Goto Top
Hallo Timo,

danke für deine konstruktive Kritik!
Ja, es ist richtig, habe dies auf englischer Version von XP Prof SP2 geschrieben.
Mir ist bei meiner Variante aufgefallen, daß es auch den Freigabepfad nicht findet, wenn dieser sich auf einer FAT32 Partition befindet. Das mounten, selbst bei Eingabe von net use in der Kommandozeile führt zu nix.
Da muß ich wohl mal noch mich etwas belesen.

Hab besten Dank!

Gruß

Tsuki