h4zz4rd
Goto Top

VB Netzlaufwerk verbinden und User begrüßen

Hallo ihr Lieben,
ich habe folgendes Problem.
Ich habe die Aufgabe bekommen, ein Anmeldescript unter VB zu erstellen, in dem der jeweils angemeldete User begrüßt wird und gleichzeitig ein Netzlaufwerk verbunden wird. Das Script soll auf einem XP Client ausgeführt werden. Das Netzlaufwerk befindet sich aúf einem virtuellen Windows 2003 Server. Da ich leider absolut keine Ahnung von VB habe, und Google auch nichts wirklich passendes für mein Problem bietet, hoffe ich auf eure Hilfe face-smile

Danke und liebe Grüße,
h4zZ4rd

Content-Key: 64857

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

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

Member: Sylvio
Sylvio Jul 27, 2007 at 12:51:02 (UTC)
Goto Top
Hi,

Versuchs mal damit
On Error Resume Next

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")  
For Each objComputer in colItems
    UN = objComputer.UserName 
Next
    Msgbox "Hello " & UN ,  vbOKOnly, "Welcome"  

Set objshell = Wscript.CreateObject("WScript.Shell")  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
objshell.Run("net use k: /d"),0 'delete exsisting map  
objshell.Run("net use k: \\servername\share"),0  
wobei k: hier den Laufwerksbuchstaben darstellt.


Gruß,
Sylvio
Member: bastla
bastla Jul 27, 2007 at 13:57:55 (UTC)
Goto Top
Hallo h4zz4rd und willkommen im Forum!

Als Alternative zu Sylvio's Vorschlag könntest Du es auch ohne die Verwendung der CMD-Shell probieren:
On Error Resume Next
Set WshNetwork = CreateObject("WScript.Network")  
MsgBox "Hello " & WshNetwork.UserName & " !", vbOKOnly, "Welcome"  
WshNetwork.RemoveNetworkDrive "K:"  
WshNetwork.MapNetworkDrive "K:", "\\servername\share"  
Das "On Error Resume Next"-Statement brauchst Du vor allem für den Fall, dass K: noch nicht mit einem Netzlaufwerk verbunden ist (und daher auch nicht getrennt werden kann).

Falls Du das sauberer lösen wolltest, könntest Du die verbundenen Laufwerke abfragen:
Set oDrives = WshNetwork.EnumNetworkDrives
For i = 0 to oDrives.Count - 1 Step 2
	If oDrives.Item(i) = "K:" Then WshNetwork.RemoveNetworkDrive "K:"  
Next

Grüße
bastla
Member: problemsolver
problemsolver Jul 27, 2007 at 15:21:44 (UTC)
Goto Top
Hi bastla!!!

was man so nebenbei so alles Schönes sieht hier... ;)
Danke sehr für deinen Beitrag! *als-kleines-licht-den-kopf-senk* *fg*

Bei uns ist es teilweise nämlich so, dass die Anmeldeskripte recht lange dauern. (.bat Scripte)
Es wurde immer so gemacht, dass mit net use * /delete /yes alle Laufwerke getrennt worden sind und dann wieder verbunden worden sind.

So wie Du es hier löst, ist es wahrscheinlich eine ganze Ecke schneller!!! (oooder?)

Interessehalber: Kennst Du noch eine Möglichkeit per Batch-Datei herauszufinden, ob ein Laufwerk K: (zum Beispiel) mit einer Ressource (nehmen wir mal "set verbindmich=\\server\meineressource$") noch verbunden ist? (Durch eine Abfrage per REG oder irgendetwas anderem?)
Auf Grundlage dieser könnte man die Anmeldeskripte schon genug optimieren ohne immer wieder alles erneut zu verbinden...

Schon mal danke im Voraus!

Lieben Gruß

Markus
Member: bastla
bastla Jul 27, 2007 at 17:31:25 (UTC)
Goto Top
Hallo problemsolver!

Freut mich, wenn Du Interessantes gefunden hast ... face-smile

So wie Du es hier löst, ist es wahrscheinlich eine ganze Ecke schneller!!! (oooder?)
Das Script oben ist eigentlich eine Entsprechung zu Eurer Vorgangsweise (trennen / neu verbinden), also sollte es in der Form nicht wirklich schneller sein. Du könntest das Ganze allerdings tatsächlich umkehren und die Abfrage dazu benutzen, nur dann zu verbinden, wenn eben keine Laufwerksverbindung (zur richtigen Freigabe) besteht.
Eine Abfrage zu diesem Zweck in Batch könnte (für mehrere Netzlaufwerke) etwa so aussehen:
@echo off & setlocal
for %%i in ("K:\\Server\Share4K" "L:\\Server\Share4L" "X:\\Server\Share4X") do for /f "tokens=1* delims=:" %%d in ('echo %%~i') do call :Connect %%d: "%%e"  
goto :eof
:Connect
set conn=
for /f "tokens=3" %%i in ('net use^|findstr /i "%1"') do set "conn=%%i"  
if /i "%conn%"==%2 goto :eof  
if defined conn net use %1 /d>nul
net use %1 %2>nul
goto :eof
Wenn bereits richtig verbunden, lässt der Batch die Verbindung bestehen, wenn verbunden, allerdings nicht mit der richtigen Freigabe, wird getrennt und neu verbunden und wenn noch nicht verbunden wird natürlich gleichfalls "net use ..." ausgeführt.

Aber ob das etwas bringt ...

Grüße
bastla
Member: h4zz4rd
h4zz4rd Jul 30, 2007 at 07:07:43 (UTC)
Goto Top
Hallo und danke für die Antwort(en) face-smile
Werd das heute morgen gleich mal ausprobieren und schauen, ob ich das auf die Reihe bekomme :P Melde mich dann später nochmal, um Bericht zu erstatten...

Liebe Grüße,
h4zZ4rd
Member: h4zz4rd
h4zz4rd Jul 30, 2007 at 07:27:05 (UTC)
Goto Top
Huhu,
da bin ich schon wieder.
Vielen vielen Dank, das klappt ja wunderbar ;)

Nur noch eine kurze Frage zum Schluss:

Set WshNetwork = CreateObject("WScript.Network") --> Was bedeutet diese Zeile ganz genau? Die restlichen weiß ich, bzw konnte man sich denken, nur die Definition dieser nicht so ganz...

Wäre super, falls mir jmd diese Frage noch beantworten könnte.

Liebe Grüße,
h4zZ4rd

P.S. Achso, kann man irgendwie Kommentare einfügen? Habe die VBS mit dem Editor erstellt.
Ciaociao
Member: bastla
bastla Aug 06, 2007 at 14:18:51 (UTC)
Goto Top
Hallo h4zz4rd!

Mit urlaubsbedingter Verspätung zum WshNetwork-Objekt den entsprechenden Hilfe-Text:

Bietet Zugriff auf die freigegebenen Ressourcen des Netzwerkes, mit dem der Computer verbunden ist.

Erstellen Sie ein WshNetwork-Objekt, wenn eine Verbindung mit Netzwerkfreigaben und Netzwerkdruckern hergestellt oder getrennt werden soll, wenn Netzwerkfreigaben zugeordnet oder entfernt werden sollen oder auf Informationen zu einem Benutzer des Netzwerkes zugegriffen werden soll.

Eigenschaften
ComputerName-Eigenschaft | UserDomain-Eigenschaft | UserName-Eigenschaft

Methoden
AddWindowsPrinterConnection-Methode | AddPrinterConnection-Methode | EnumNetworkDrives-Methode | EnumPrinterConnections-Methode | MapNetworkDrive-Methode | RemoveNetworkDrive-Methode | RemovePrinterConnection-Methode | SetDefaultPrinter-Methode

Kommentare können nach einem Apostroph eingefügt werden, also etwa
WshNetwork.RemoveNetworkDrive "K:" 'Netzlaufwerk K: trennen  

Grüße
bastla