53111
Goto Top

VBS vorhandene NetzLaufwerke auslesen

Hi

wie kann ich mit VBS auslesen welche Netzlaufwerke vorhanden sind? Auch ein Prüfung ob ein bestimmtes Laufwerk vorhanden ist wäre schon schön?

ich habe folgendes

netzobjekt.RemoveNetworkDrive "N:", true, true
netzobjekt.mapnetworkdrive "N:", "\\..."

nun ist das Problem dass wenn kein Laufwerk N: vorhanden ist eine Fehlermeldung erscheint. ich möchte deshalb zuvor prüfen lassen ob das Laufwerk vorhanden ist. Falls es da ist wäre auch gut wenn der vorhandene Pfad des Laufwerkes gespeichert oder ausgegeben wird bevor man es löscht.

gruß saibonaut

Content-Key: 68053

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

Printed on: April 18, 2024 at 23:04 o'clock

Member: bastla
bastla Sep 06, 2007 at 10:18:32 (UTC)
Goto Top
Hallo saibonaut!

Aus der MS-Doku:
Set WshNetwork = WScript.CreateObject("WScript.Network")  
Set oDrives = WshNetwork.EnumNetworkDrives
WScript.Echo "Zuordnungen der Netzlaufwerke:"  
For i = 0 to oDrives.Count - 1 Step 2
	WScript.Echo "Laufwerk " & oDrives.Item(i) & " = " & oDrives.Item(i+1)  
Next

Grüße
bastla
Mitglied: 53111
53111 Sep 06, 2007 at 12:22:21 (UTC)
Goto Top
wieso geht das nicht mit -1?

wenn gar kein laufwerk vorhanden ist geht das programm ja dann nicht in den else teil. gibt es auch noch einen geschickteren weg wenn man mehrere laufwerke bearbeiten und verwenden will?

For i = -1 to test.Count - 1 Step 2


If test.Item(i) = "H:" Then

netzobjekt.RemoveNetworkDrive "H:", true, true

netzobjekt.mapnetworkdrive "H:", "\\Server2\Home\"&benutzername
wscript.Echo "if"

Else

netzobjekt.mapnetworkdrive "H:", "\\Server2\Home\"&benutzername
wscript.Echo "else"

End If
Next
Member: bastla
bastla Sep 06, 2007 at 14:07:13 (UTC)
Goto Top
Hallo saibonaut!

wieso geht das nicht mit -1?
Ich nehme an, Du beziehst Dich auf Deinen Versuch mit dem Schleifenstartwert -1; wenn ja, dann musst Du berücksichtigen, dass es kein "test.item(-1)" gibt ...

gibt es auch noch einen geschickteren weg wenn man mehrere laufwerke bearbeiten und verwenden will?
Meinst Du zum Trennen und neu Verbinden der Laufwerke? Im Prinzip könntest Du einfach den Fehler beim Trennen eines gar nicht verbundenen Laufwerks mit einem "On Error Resume Next" abfangen, also etwa
On Error Resume Next
netzobjekt.RemoveNetworkDrive "H:", true, true  
On Error Goto 0 'um Fehler (zB beim Verbinden) wieder angezeigt zu bekommen  
netzobjekt.mapnetworkdrive "H:", "\\Server2\Home\"&benutzername  
Wenn Du den Vorgang noch in ein Sub auslagerst, könnte das so aussehen:
Set netzobjekt = WScript.CreateObject("WScript.Network")  
Verbinde "H:", "\\Server2\Home\"&benutzername  
Verbinde "O:", "\\Server1\Old"  
Verbinde "S:", "\\Server2\Sonstiges"  

Sub Verbinde(Buchstabe, Pfad)
On Error Resume Next
netzobjekt.RemoveNetworkDrive Buchstabe, true, true
On Error Goto 0
netzobjekt.mapnetworkdrive Buchstabe, Pfad
End Sub

Grüße
bastla
Mitglied: 53111
53111 Sep 06, 2007 at 14:24:13 (UTC)
Goto Top
hab es jetzt so gelöst:
scheint zu funktionieren
Dim netzobjekt, benutzername, laufwerkarray 


set netzobjekt=wscript.createobject("wscript.network")  
benutzername = netzobjekt.UserName


Set test = netzobjekt.EnumNetworkDrives

laufwerkarray = Array("H:","X:","Z:")  

	
		
	For i = 0 to test.Count - 1 Step 2

	
		For j = 0 to UBound(laufwerkarray)	


		
			If test.Item(i) = laufwerkarray(j) Then

 				netzobjekt.RemoveNetworkDrive laufwerkarray(j), true, true 
			
 				wscript.Echo  test.Item(i) &" "& test.Item(i+1)   & " wurde entfernt und wird neu belegt!"  
		
			End If
		Next

	Next


netzobjekt.mapnetworkdrive "H:", "\\Server2\Home\"&benutzername  

netzobjekt.mapnetworkdrive "X:", "\\Server2\work"  

netzobjekt.mapnetworkdrive "Z:", "\\Server2\apps"  
[Edit Biber] Als Codeblock formatiert.[/Edit]
Member: bastla
bastla Sep 06, 2007 at 14:38:47 (UTC)
Goto Top
Hallo saibonaut!

Ist zwar etwas sauberer, allerdings sind dadurch die Laufwerksbuchstaben redundant eingetragen ...

Vielleicht so:
set netzobjekt=wscript.createobject("wscript.network")  
benutzername = netzobjekt.UserName
set test = netzobjekt.EnumNetworkDrives

laufwerkarray = Array( _
	"H:", "\\Server2\Home\"&benutzername", _   
	"X:", "\\Server2\work", _  
	"Z:", "\\Server2\apps")  
	
For j = 0 to UBound(laufwerkarray) - 1 Step 2 
	For i = 0 to test.Count - 1 Step 2
		If test.Item(i) = laufwerkarray(j) Then
			netzobjekt.RemoveNetworkDrive laufwerkarray(j), true, true
			wscript.Echo test.Item(i) &" "& test.Item(i+1) & " wurde entfernt und wird neu belegt!"  
		End If
	Next
	netzobjekt.mapnetworkdrive laufwerkarray(j), laufwerkarray(j+1)
Next

Grüße
bastla
Mitglied: 53111
53111 Sep 07, 2007 at 06:27:58 (UTC)
Goto Top
diese idee wir du hatte ich gestern auch. habe das jetzt so verwirklicht. die änderungen werden jetzt noch protokolliert und in einer datei gespeicher.
Dim netzobjekt, benutzername, laufwerkarray 


set netzobjekt=wscript.createobject("wscript.network")  
benutzername = netzobjekt.UserName

Name = "C:\Dokumente und Einstellungen\"&benutzername&"\Desktop\Info_zu_neuen_Netzlaufwerken.txt"  

Set InfoDateiObjekt = CreateObject("Scripting.FileSystemObject")  
Set InfoDatei = InfoDateiObjekt.OpenTextFile(Name, 2, True)
Set objFile = InfoDateiObjekt.GetFile(Name)


Set test = netzobjekt.EnumNetworkDrives

laufwerkarray = Array(	"H:",_  
			"\\Server2\Home\"&benutzername,_  
			"X:",_  
			"\\Server2\work",_  
			"Z:",_  
			"\\Server2\apps"_  
		     )


InfoDatei.WriteLine "Die folgenden Netzlaufwerke wurden gelöscht: "  
InfoDatei.WriteLine " "  
	
		
	For i = 0 to test.Count - 1 Step 2
		For j = 0 to UBound(laufwerkarray)			
			If test.Item(i) = laufwerkarray(j) Then

				
			        InfoDatei.WriteLine test.Item(i) &" "& test.Item(i+1) 				  


 				netzobjekt.RemoveNetworkDrive laufwerkarray(j), true, true					
			End If
		Next
	Next



netzobjekt.mapnetworkdrive laufwerkarray(0), laufwerkarray(1)

netzobjekt.mapnetworkdrive laufwerkarray(2), laufwerkarray(3)

netzobjekt.mapnetworkdrive laufwerkarray(4), laufwerkarray(5)
	
InfoDatei.WriteLine " "  
InfoDatei.WriteLine " "  
InfoDatei.WriteLine "Die gelöschten Netzlaufwerke wurden mit folgen Pfaden neu verbunden: "  
InfoDatei.WriteLine " "  
InfoDatei.WriteLine laufwerkarray(0) &" "& laufwerkarray(1) 	  
InfoDatei.WriteLine laufwerkarray(2) &" "& laufwerkarray(3) 	  
InfoDatei.WriteLine laufwerkarray(4) &" "& laufwerkarray(5) 	  

InfoDatei.Close 

werde nun mal testen ob sich das Script vom server aus ausführen lässt. habt ihr eine idee wie man unterbinden kann dass das script bei jedem login ausgeführt wird - es soll nur bei ersten login des users verwendet werden?

wie würde ich z.B.: /PERSISTENT:YES mit VBS realisieren


gruß
saibonaut
Mitglied: 53111
53111 Sep 07, 2007 at 12:48:36 (UTC)
Goto Top
hat jemand noch eine idee wie ich verhinder kann das das script bei jedem neuen login diese datei schreibt. ich möchte eigentlich nur beim ersten login des nutzer die datei schreiben lassen.
auch denkbar wäre das ganze script nur einmal beim ersten login des nutzers ablaufen zu lassen und die laufwerke dann /PERSISTENT:YES zu machen. wie mach ich das mit vbs?
Member: bastla
bastla Sep 07, 2007 at 18:23:54 (UTC)
Goto Top
Hallo saibonaut!

hat jemand noch eine idee wie ich verhinder kann das das script bei jedem neuen login diese datei schreibt.
Vielleicht, indem Du vorweg überprüfst, ob sie bereits existiert?

/PERSISTENT:YES zu machen. wie mach ich das mit vbs?
netzobjekt.mapnetworkdrive laufwerkarray(0), laufwerkarray(1), True

Grüße
bastla