53111

falsche anzahl netzlaufwerke?

hallo ich habe mein script noch etwas erweitert und will noch einige dinge überprüfen lassen bevor dann eine sub gestartet werden soll.

irgendwie werden immer 2 laufwerke zuviel gezählt. ich erwarte eigentlich eine test = netzobjekt.EnumNetworkDrives die doppelte anzahl wie ich laufwerke besitze. (d.h. bei 6 elementen 3 vorhandene laufwerke?)

wo ist mein fehler? und lässt er sich sauber mit dem "-2" beheben?

Dim netzobjekt, benutzername, laufwerkarray, arraylaenge 
set netzobjekt=wscript.createobject("wscript.network")  
benutzername = netzobjekt.UserName

'Pfad der Protokoll-Datei hier einstellen:'  
Name = "C:\Dokumente und Einstellungen\"&benutzername&"\Desktop\Protokoll_zu_neuen_Netzlaufwerken.txt"  


Set test = netzobjekt.EnumNetworkDrives


'Laufwerknamen + gewünschten Pfad hier einstellen:'  
laufwerkarray = Array(	"H:",_  
			                  "\\Server2\Home\"&benutzername,_  
			                  "X:",_  
			                  "\\Server2\work",_  
			                  "Z:",_  
			                  "\\Server2\apps"_  
		                 )

arraylaenge = UBound(laufwerkarray) + 1 



If test.Count <> 0 Then

    If test.Count - 2 = arraylaenge Then   'falsche anzahl an laufwerken???'  
    
    	 For k = 0 to UBound(laufwerkarray)			
		      If test.Item(k) = laufwerkarray(k) And test.Item(k+1) = laufwerkarray(k+1) Then
    	        wscript.Echo "alles ok"  
          Else
                wscript.Echo "else 3"  
         	  'sub aufrufen'  
	        End If
    	 Next
      
    Else
        wscript.Echo "else 2"  
    'sub aufrufen'   
    
    End If 

Else
   wscript.Echo "else 1"  
'sub aufrufen '  

End If


irgendwie erscheint dann auch ein fehler in der innersten if entscheidung?

gruß saibonaut
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 68275

Url: https://administrator.de/forum/falsche-anzahl-netzlaufwerke-68275.html

Ausgedruckt am: 28.06.2025 um 00:06 Uhr

bastla
bastla 10.09.2007 um 12:29:36 Uhr
Goto Top
Hallo saibonaut!

Die "EnumNetworkDrives"-Aufzählung kann auch Laufwerksverbindungen ohne zugeordneten Laufwerksbuchstaben enthalten.

Lass Dir doch einfach zur Kontrolle die entsprechenden Werte anzeigen, etwa:
For i = 0 to test.Count - 1 Step 2
    WScript.Echo "Laufwerk " & test.Item(i) & " = " & test.Item(i + 1)  
Next

Abgesehen davon, dass ich eine übereinstimmende Reihenfolge der Elemente in beiden Arrays nicht voraussetzen, sondern zur Sicherheit jedes Element in einer zweiten Schleife vergleichen würde, solltest Du eher
For k = 0 to UBound(laufwerkarray) - 1 Step 2
verwenden, weil Du ansonsten bei tatsächlich gleicher Anzahl von Elementen mit dem Index (i + 1) "out of bounds" landest.

Grüße
bastla
53111
53111 10.09.2007 um 12:54:34 Uhr
Goto Top
ok wenn das so "Die "EnumNetworkDrives"-Aufzählung kann auch Laufwerksverbindungen ohne zugeordneten Laufwerksbuchstaben enthalten." ist macht ein überprüfung nicht viel sinn. ich wollte mit diesen überprüfungen eigentlich verhindern dass die protokoll datei mehrmal geschrieben wird:
53111
53111 10.09.2007 um 13:46:36 Uhr
Goto Top
ich habs jetzt so gelöst. scheint zu funktionieren?

Dim netzobjekt, benutzername, laufwerkarray, arraylaenge, zaehler 
set netzobjekt=wscript.createobject("wscript.network")  
benutzername = netzobjekt.UserName

Set test = netzobjekt.EnumNetworkDrives
	
'Laufwerknamen + gewünschten Pfad hier einstellen:'  
laufwerkarray = Array(	"H:",_  
			                  "\\Server2\Home\"&benutzername,_  
			                  "X:",_  
			                  "\\Server2\work",_  
			                  "Z:",_  
			                  "\\Server2\apps"_  
		                 )
		                 
zaehler = 0


If test.Count <> 0 Then
   
      	For h = 0 to UBound(laufwerkarray) - 1 Step 2
        	 For g = 0 to test.Count - 1 Step 2
      		    If laufwerkarray(h) = test.Item(g) And laufwerkarray(h+1) = test.Item(g+1) Then
          		wscript.Echo "trifft zu"  
              zaehler = zaehler + 1 
              Else		
              wscript.Echo "trifft nicht zu"      
      		    End If
           Next
        Next
        
        If zaehler = (UBound(laufwerkarray) + 1) / 2 Then
              
        Else
             call sublaufwerke 
        End If
        
   
Else
   wscript.Echo "else 1"  
   call sublaufwerke 
End If



Sub sublaufwerke 

      'Pfad der Protokoll-Datei hier einstellen:'  
      Name = "C:\Dokumente und Einstellungen\"&benutzername&"\Desktop\Protokoll_zu_neuen_Netzlaufwerken.txt"  


      Set InfoDateiObjekt = CreateObject("Scripting.FileSystemObject")  
      Set InfoDatei = InfoDateiObjekt.OpenTextFile(Name, 2, True)
      Set objFile = InfoDateiObjekt.GetFile(Name)
       
       
        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
      
      'bei mehr Laufwerken erweitern - pro Laufwerk werden 2 neue Werte benötigt'  
      netzobjekt.mapnetworkdrive laufwerkarray(0), laufwerkarray(1), true
      netzobjekt.mapnetworkdrive laufwerkarray(2), laufwerkarray(3), true
      netzobjekt.mapnetworkdrive laufwerkarray(4), laufwerkarray(5), true
      'hier erweitern für Laufwerkmapping'  
      	
        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) 	  
        'hier erweitern für Infodatei'  
        InfoDatei.Close 

End Sub