ferengie
Goto Top

Beim Login Script alle Netzwerklaufwerke trennen

Hallo Gemeinde,

ich habe ein Problem mit unserem Logi Script.

Beim Login sollen alle Netzlaufwerke getrennt werden.
Dies wird auch gemacht. Aber wenn man schon angemeldet ist und das Login Script noch einmal ausführt erscheint folgende Fehlermeldung:

Fehler: Falscher Parameter
Code 80070057
Quelle: WSHNetwork.RemoveNetworkDrive
Es handelt sich um folgenden Abschnitt:

'Disconnect ALL mapped drives
Set clDrives = objNetwork.EnumNetworkDrives
For i = 0 to clDrives.Count -1 Step 2
objNetwork.RemoveNetworkDrive clDrives.Item(i), True, True
Next

Es betrifft die Zeile:
objNetwork.RemoveNetworkDrive clDrives.Item(i), True, True


Habe ich dort einen Denkfehler.

Dieser Fehler erscheint immer dann, wenn sich ein User über Remote auf einen PC einwählt.

Also, wie schaffe ich es, dass erst alle vorhandenen Netzlaufwerke getrennt werden. Nach der erfolgreichen Trennung werden die Laufwerke wieder gemappt.

Vielen Dank im voraus!

Content-Key: 163101

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

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

Member: laster
laster Mar 22, 2011 at 08:25:20 (UTC)
Goto Top
Hallo,

wenn's nicht VB sein mus:
net use * /delete

vG
LS
Member: Snowman25
Snowman25 Mar 22, 2011 at 08:32:57 (UTC)
Goto Top
Und wenns doch VB sein muss:
Set objShell = CreateObject("WScript.Shell")  
objShell.Run "net use * /DELETE",0,True  

GRuß
Snow
Member: Ferengie
Ferengie Mar 22, 2011 at 08:51:48 (UTC)
Goto Top
Funktioniert auch nicht wirklich.
Es werden zwar alle LW getrennt, aber nicht neu gemappt.
Hier mal das komplette Script:

'Option Explicit

Dim objNetwork, strDriveLetter, strRemotePath, strUserName

strDriveLetter = "G:" 
strRemotePath = "\\rmsg-1.rmsg.intern\privat\" 


Set objNetwork = WScript.CreateObject("WScript.Network") 

strDomain = objNetwork.UserDomain 
strUserName = objNetwork.UserName 


'Disconnect ALL mapped drives
Set clDrives = objNetwork.EnumNetworkDrives
For i = 0 to clDrives.Count -1 Step 2
   objNetwork.RemoveNetworkDrive clDrives.Item(i), True, True
Next

objNetwork.MapNetworkDrive "R:" , "\\rmsg-1.rmsg.intern\rmsg",True
objNetwork.MapNetworkDrive "O:" , "\\rmsg-1.rmsg.intern\progs",True

'Home Directory Setzen
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath & strUserName


'WScript.Echo " Launch Windows Explorer, check: "& strDriveLetter, strRemotePath & strUserName
'WScript.Echo " Launch Windows Explorer, check: "& strDriveLetter
'WScript.Quit
Member: BigWim
BigWim Mar 22, 2011 at 09:01:04 (UTC)
Goto Top
Moin Ferengie,

ehrlich gesagt, versteht ich schon gar nicht den Ablauf.

Aber wenn man schon angemeldet ist und das Login Script noch einmal ausführt erscheint folgende Fehlermeldung
Wie kann ein Loginscript ein zweites Mal laufen, wenn ich schon angemeldet bin?


Ein Benutzer meldet sich an.
Loginscript läuft ohne Fehler.

Ein Benutzer meldet sich über Remote.
Loginscript meldet "falscher Paramter"


Dein Script geht davon aus, dass in jedem Laufwerke vorhanden sind, die zu trennen sind. Ist das so?
Lass Dir doch mal anzeigen, was das Script eigentlich trennen möchte.
For i = 0 to clDrives.Count -1 Step 2
WScript.Echo "Trenne " & clDrives.Item(i)  
objNetwork.RemoveNetworkDrive clDrives.Item(i), True, True
Next


Grüße
Markus
Member: Ferengie
Ferengie Mar 22, 2011 at 09:10:17 (UTC)
Goto Top
Es kommt folgende Meldung:

Trenne

Mehr nicht.

Nur zu meiner Entschuldigung - Ich bin nicht der VBS Profi.
Member: BigWim
BigWim Mar 22, 2011 at 09:15:47 (UTC)
Goto Top
Moin Ferengie,

Nur zu meiner Entschuldigung - Ich bin nicht der VBS Profi.
ich auch nicht face-wink und hoffe, dass das Echo richtig ist.

Ich denke aber, dass der Grund ist. Weil nichts zum trennen da ist, gibt es auch keine Parameter.

Damit Du nicht erst in diesen Fehler läufst, baue doch eine Abfrage ein. In etwa so (Syntax ist mir unbekannt)
if clDrives.Count > 0 then
  For i = 0 to clDrives.Count -1 Step 2
  objNetwork.RemoveNetworkDrive clDrives.Item(i), True, True
  Next
endif oder end if

Markus
Member: Ferengie
Ferengie Mar 22, 2011 at 09:29:04 (UTC)
Goto Top
Hallo BigWim!

Jetzt kommt folgende Meldung:

Fehler: Objekt erforderlich: clDrives'
Code: 800A01A8
Quelle: Laufzeitfehler in Microsoft VBScript

Aber vielen Dank!
Member: BigWim
BigWim Mar 22, 2011 at 09:46:23 (UTC)
Goto Top
Moin Ferengie,

ich fürchte, dass hat etwas mit der Syntax zu tun.

Ziel sollte sein, durch eine Abfrage von Count festzustellen, ob zu trennende Laufwerke vorhanden sind.

Vielleicht kannst Du die aktuelle Version des Scriptes mal veröffentlichen.

Grüße
Markus
Member: Ferengie
Ferengie Mar 22, 2011 at 09:48:50 (UTC)
Goto Top
Hallo BigWim,

die komplette Syntax steht weiter oben (3. Beitrag).
Member: laster
laster Mar 22, 2011 at 09:51:01 (UTC)
Goto Top
Hallo noch einmal,

@echo off

set strDriveLetter=G:  
set strRemotePath=\\rmsg-1.rmsg.intern\privat

::Disconnect ALL mapped drives 
net use * /delete

net use R: \\rmsg-1.rmsg.intern\rmsg
net use O: \\rmsg-1.rmsg.intern\progs

::Home Directory Setzen 
net use %strDriveLetter% %strRemotePath%\%USERNAME%

(falls es nicht VB sein muss).

vG
LS
Member: bastla
bastla Mar 22, 2011 at 09:51:29 (UTC)
Goto Top
@BigWim
Die zusätzliche Abfrage ist nicht nötig - wenn clDrives.Count 0 ergibt, müsste die Schleife von 0 bis -1 laufen; da sie das bei einer Schrittweite von +2 nicht kann, wird sie einfach übersprungen ...
Dein Vorschlag von oben wäre übrigens so etwas informativer:
Set objNetwork = WScript.CreateObject("WScript.Network")  
Set clDrives = objNetwork.EnumNetworkDrives 
For i = 0 to clDrives.Count -1 Step 2 
   WScript.Echo clDrives.Item(i), clDrives.Item(i+1)
Next 
Grüße
bastla
Member: bastla
bastla Mar 22, 2011 at 09:53:35 (UTC)
Goto Top
Hallo Ferengie!

Die Fehlermeldung ist vermutlich darauf zurückzuführen, dass Du nicht BigWims Vorschlag in Dein Script integriert, sondern eigenständig zu testen versucht hast - dann gibt es natürlich kein Objekt "clDrives" ...

Grüße
bastla
Member: BigWim
BigWim Mar 22, 2011 at 10:37:16 (UTC)
Goto Top
@bastla

Moin Bastla,

Dein Vorschlag von oben wäre übrigens so etwas informativer
Wenn ich doch soweit schon wäre ....

wenn clDrives.Count 0 ergibt, müsste die Schleife von 0 bis -1 laufen
Genau: Müßte

Ich befolge immer noch den Rat meines Klassenlehrers: Markus! Scharf nachdenken und dann das andere nehmen.
Meine Vermutung ging dahin, dass das Konstrukt vielleicht doch nicht richtig aufgebaut ist und mit der Abfrage wollte ich auf Nr. sichergehen, weil ich nämlich nicht weiß, was objNetwork.EnumNetworkDrives zurückliefert.

Grüße
Markus
Member: bastla
bastla Mar 22, 2011 at 10:50:10 (UTC)
Goto Top
Hallo BigWim!
weil ich nämlich nicht weiß, was objNetwork.EnumNetworkDrives zurückliefert.
Wie Du dem "Enum" entnehmen kannst, erhältst Du eine "Enumeration" (Aufzählung) - kannst Du so ähnlich wie ein eindimensionales Array verwenden, sodass also auch
Set objNetwork = WScript.CreateObject("WScript.Network")  
Set clDrives = objNetwork.EnumNetworkDrives 
For i = 0 to clDrives.Count -1 Step 2 
   WScript.Echo clDrives(i), clDrives(i+1)
Next
funktionieren würde ...

Grüße
bastla
Member: Ferengie
Ferengie Mar 22, 2011 at 10:50:18 (UTC)
Goto Top
Hallo an Alle,

ich habe das Problem jetzt gelöst.

Folgende Zeile habe ich noch vor "'Disconnect ALL mapped drives " eingefügt:

On Error Resume Next
WSHNetwork.RemoveNetworkdrive

If Err.Number Then
WSHNetwork.RemoveNetworkdrive "G:"
WSHNetwork.RemoveNetworkdrive "O:"
WSHNetwork.RemoveNetworkdrive "R:"
End if

Vielen Dank für Eure Mithilfe!
Member: BigWim
BigWim Mar 22, 2011 at 11:03:59 (UTC)
Goto Top
Hallo Bastla,

vielen Dank für die Erklärung.

Markus