Hallo ihr da draussen,
ich hab ein kleines Script das unter anderem Netzlaufwerke verbindet.
So sieht der Code aus:
Spoiler anzeigen
Func _MapDrive()
GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Ein Moment bitte," & @CRLF & @CRLF & "Ihre Netzwerklaufwerke werden verbunden.")
FileCopy(@LogonServer & "\netlogon\logon.vbs", @ScriptDir & "\logon.vbs")
Sleep(500)
If FileExists (@ScriptDir & "\logon.vbs") Then
;~ If $batch = 1 Then
ShellExecuteWait(@ScriptDir & "\logon.vbs", "", @SW_HIDE)
_WriteLogData("Kopie erfolgreich, Login Batchfile lokal ausgeführt")
Else
ShellExecuteWait(@LogonServer & "\netlogon\logon.vbs", "", @SW_HIDE)
_WriteLogData("Kopieren fehlgeschlagen,Login Batchfile von Logonserver ausgeführt.")
EndIf
For $RoundTrip = 1 to 3
$Drive = DriveGetDrive( "network" )
If NOT @error Then
GUICtrlSetData($lbl_info,@CRLF & @CRLF & "Netzlaufwerke erfolgreich verbunden.")
ExitLoop
Else
GUICtrlSetData($lbl_info,@CRLF & @CRLF & "Netzlaufwerke noch nicht verbunden." &@CRLF & @CRLF & "Bitte warten...")
RunWait(@ScriptDir & "\logon.vbs","",@SW_HIDE)
EndIf
Next
_WriteLogData("Netzlaufwerke verbunden.")
GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Netzwerklaufwerke erfolgreich verbunden.")
Sleep(500)
Return
EndFunc ;==>_MapDrive
Jetzt meinte ein Kollege dass das so nicht richtig wäre, und sein Schnipsel sieht so aus:
Spoiler anzeigen
Func _MapDrive()
;$LogonServer = "\\dc.PKV.intern"
GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Einen Moment bitte," & @CRLF & @CRLF & "Ihre Netzwerklaufwerke werden verbunden.")
$batch = FileCopy(@LogonServer & "\netlogon\logon.vbs", @ScriptDir & "\logon.vbs", 1)
Sleep(500)
If $batch = 1 Then
ShellExecuteWait(@ScriptDir & "\logon.vbs", "", "", "open", @SW_HIDE)
_WriteLogData("Kopieren erfolgreich, Login Batchfile '" & @ScriptDir & "\logon.vbs' lokal ausgeführt")
Else
ShellExecuteWait(@LogonServer & "\netlogon\logon.vbs", "", "", "open", @SW_HIDE)
_WriteLogData("Kopieren fehlgeschlagen, Login Batchfile von Logonserver '" & @LogonServer & "' ausgeführt.")
EndIf
For $RoundTrip = 1 to 3
$Drive = DriveGetDrive( "network" )
If NOT @error Then
GUICtrlSetData($lbl_info,@CRLF & @CRLF & "Netzlaufwerke erfolgreich verbunden.")
ExitLoop
Else
GUICtrlSetData($lbl_info,@CRLF & @CRLF & "Netzlaufwerke noch nicht verbunden." &@CRLF & @CRLF & "Bitte warten...")
RunWait(@ScriptDir & "\logon.vbs","",@SW_HIDE)
EndIf
Next
If NOT @error Then
_WriteLogData("Netzlaufwerke verbunden.")
GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Netzwerklaufwerke erfolgreich verbunden.")
Else
_WriteLogData("Netzlaufwerke NICHT verbunden.")
GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Netzwerklaufwerke konten nicht verbunden werden.")
EndIf
Sleep(500)
Return
EndFunc ;==>_MapDrive
;---------------------------
Jetzt wüsset ich gerne mal ob ich das [optional] in der Hilfe richtig verstehe.
Er meint ich müsste z.B. bei
[autoit]ShellExecuteWait(@ScriptDir & "\logon.vbs", "", "", "open", @SW_HIDE)
[/autoit]alle Parameter angeben oder eben auch leere Strings wenn ich am Ende ein @SW_HIDE nutzen will.
bei mir siehts so aus und funktioniert:
[autoit]ShellExecuteWait(@LogonServer & "\netlogon\logon.vbs", "", @SW_HIDE)
[/autoit]Welche Version ist denn jetzt richtig? Funktionieren tun beide.
Hat einer von euch ne Idee warum das manchmal trotzdem nicht klappt?
Wir vermuten dass das Problem nicht im Script liegt sondern irgdnewelche anderen Ursachen dazu führen die wir einfach nicht kennen.
Netzlaufwerke verbinden klappt ja nicht immer 100%ig. Gerade wenn man sich über UMTS per VPN einwählt gibt es da immer wieder Probleme.
Woran kann das noch liegen? Selbst wenn die verbindung schlecht ist müssten die Laufwerke doch verbunden werden "können". Oder gibt es da irgednwelche Timeouts die man ändern kann?
Und dann noch eine Frage:
Mit
$Drive = DriveGetDrive( "network" )
[/autoit]überprüfe ich ob es ein Netzlaufwerk gibt. Wenn ja hat das mapping geklappt.
Das Problem ist dass dieses Tool mittlerweile Firmenübergreifend eingesetzt wird und in den anderen Firmen gibt es Mitarbeiter die händisch gemappte Laufwerke haben.
Kann ich noch irgendwie anders zuverlässig testen ob das funktioniert hat?
Laufwerksbuchstabe abfragen dgeht auch nicht weil die je nach Firma unterschiedlich sind.