53111
Goto Top

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

Content-Key: 68275

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

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 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
Mitglied: 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:
Mitglied: 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