Ah Danke.
Jetzt kommt der Fehler schonmal nciht mehr..
Es funktioniert zwar noch nicht, bzw. ruft es die Funktion noch nicht auf aber es geht vorran
Beiträge von Camulus
-
-
Ich hab eine Alternative zu AdlibRegister gefunden: So siehst das Original aus:
Spoiler anzeigen
[autoit]Global $timer = TimerInit(), $counter, $Funktionen[2][2] = [['"Test", 0, "Test1", "blabla1"', 1000], ['"Test", 0, "Test2", "blabla2"', 2000]]
[/autoit]
While 1 If TimerDiff($timer) >= $Funktionen[$counter][1] Then ; In diesem Array kann man einstellen wie viel Zeit zwischen dem Aufruf der Funktionen liegen soll (Also nicht die Zeit zwischen den Skripten) $timer = TimerInit() ; Zeitmarke wird neu gesetzt Execute('Call(' & $Funktionen[$counter][0] & ')') ; Call ruft Funktionen auf, das erste im String ist der Name der Funktion, danach folgen die Parameter! Auf diese Art kann man Funktionen über Strings callen If $counter = UBound($Funktionen) - 1 Then ; Wenn counter maximal groß ist, wird es wieder auf 0 gesetzt, ansonsten + 1 $counter = 0 Else $counter += 1 EndIf EndIfWEnd
Func Test($Flag, $Title, $Text) MsgBox($Flag, $Title, $Text)EndFuncSo meine Anpassungen bisher:
Spoiler anzeigen
[autoit]Global $timer = TimerInit(), $counter, $Funktionen[2][2] = [["VPN_Status",0,_VPNStatus, 10000], ["Check_drives",0,_CheckDrives, 20000]]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If TimerDiff($timer) >= $Funktionen[$counter][1] Then ; In diesem Array kann man einstellen wie viel Zeit zwischen dem Aufruf der Funktionen liegen soll (Also nicht die Zeit zwischen den Skripten) $timer = TimerInit() ; Zeitmarke wird neu gesetzt
[/autoit]
Execute('Call(' & $Funktionen[$counter][0] & ')') ; Call ruft Funktionen auf, das erste im String ist der Name der Funktion, danach folgen die Parameter! Auf diese Art kann man Funktionen über Strings callen
If $counter = UBound($Funktionen) - 1 Then ; Wenn counter maximal groß ist, wird es wieder auf 0 gesetzt, ansonsten + 1 $counter = 0 Else $counter += 1 EndIf EndIfDen Fehler den ich bekomme:
[autoit]
(141) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
in dieser Zeile:Global $timer = TimerInit(), $counter, $Funktionen[2][2] = [["VPN_Status",0,_VPNStatus, 10000], ["Check_drives",0,_CheckDrives, 20000]]
[/autoit]Ich muss aber feststellen dass das meinen Horizont sprengt
[autoit]
Hier steige ich schon kognitiv aus:$timer = TimerInit(), $counter, $Funktionen[2][2] = [["VPN_Status",0,_VPNStatus, 10000], ["Check_drives",0,_CheckDrives, 20000]]
[/autoit]Dummerweise muss ich nur jedes halbe Jahr - Jahr mal was programmieren, deswegen dauert es auch immer recht lange bis ich mich erinnere wie dieses und jenes zu lesen ist. :wacko:
Kann mir da mal jemand auf die Sprünge helfen?
-
Hi ihr,
ich habe hier ein kleines Tool das damals unsere VPN Verbinung aufgebaut hat, Netzlaufwerke verbunden usw.
Jetzt sind wir allerdings dabei auf PaloAlto umzustellen und die bringt den GlobalProtect Client mit. Den kann man nicht wirklich irgendwie beeinflussen oder steuern.
Also müssen unsere User künftig die VPN Verbindung über den PA Client aufbauen und genau dann soll das Programm dafür sorgen dass Laufwerke verbundnen werden usw.Das alles hab ich mit AdlibRegister gelöst.
Wer sich das antun will, anbei der Code, ist noch etwas wüst, weil ich verschiedene Möglichkeiten getestet hab.Vielleicht ist das aber der völlig falsche Ansatz.
Das Problem ist dass ich den Client nicht steueren kann wir unseren Usern aber zu viel Klickerei ersparen wollen. Also sollten die eigentlich nur die VON Verbindung aufbauen und den Rest soll das Programm machen.
Nur weiss ich keinen besseren Weg festzustellen ob eine VPN Verbindung besteht als ein Ping.Hat jemand eine bessere Idee?
-
Danke chip.
Funktioniert schon fast. Allerdings wird die Funtion _CreateGui nicht aufgerufen.Habs noch ein bißchen umgebaut:
[autoit]While 1
[/autoit][autoit][/autoit][autoit]
Sleep(1000)
$erg = _GetTrayMessage()If $erg == 1 Then ExitLoop
[/autoit]
MsgBox(0,"","Loop verlassen",1)
_CreateGUI()
_MapDrive()
EndIf
Wend
Func _GetTrayMessage()
Local $wl, $List, $LastList = ''
$List = ''
$wl = WinList("[class:tooltips_class32]")
For $n = 1 To $wl[0][0]
If BitAND(WinGetState($wl[$n][1]), 2) Then
$List &= WinGetTitle($wl[$n][1])
EndIf
Next
If $List = ("Dienste verbunden") Then
MsgBox(0,"","Dienste verbunden",1)
Return 1
MsgBox(0,"","weiter",1) EndIF
EndFunc ;==>_GetTrayMessageDie Messagebox mit weiter kommt nicht und ich verstehe nicht ganz warum
-
hab mir mal die aktuellen AD Scripts runtergladen und schon gehts wieder
-
das ist recht groß....
ich glaub die bereiche um die es geht sind:Spoiler anzeigen
[autoit]#include <AD.au3>
[/autoit] [autoit][/autoit] [autoit]
Func _GetUserAD()
;~ Benutzeraten aus Abfragen, wichtig für "Passwort läuft ab" AnzeigenGlobal $UserAccountControl, $samAccountName,$FirstName, $LastName, $title, $PasswordLastChanged, $IsAccountLocked, $DaysLeft,$msg,$icon ,$AnzeigeDatPwdExpires, $CounterLocal $Found = 0$AnmeldeUser = @UserName
;~ $LogonServer = "dc.compass.local";~ $LogonServer = @LogonDNSDomain$LogonServer = @LogonDomain
$serverName = $LogonServer$baseStr = "DC="& @LogonDomain&",DC=local"
;~ $filterStr = "(&(objectCategory=Person) (objectClass=user)"$filterStr = "(&(objectCategory=Person)(objectClass=user)(sAMAccountName=" & @UserName & "))"$ado = ObjCreate("ADODB.Connection") ; erstellt eine Instanz des Objektes ADODB.Connection$ado.Provider = "ADSDSOObject"
$ado.Open ("ADS-Search" )
$adoCmd = ObjCreate("ADODB.Command")$adoCmd.ActiveConnection = $ado$adoCmd.Properties("Page Size") = 1000$adoCmd.Properties("Cache Results") = 1$adoCmd.CommandText = "<LDAP://" & $serverName & "/" & $baseStr & ">;" & $filterStr & ";ADsPath;subtree"
_WriteLogData("Benutzereinträge für " & @UserName & " werden gesucht, auf Server " & StringReplace($LogonServer,"",""))_WriteLogData("Benutzereinträge für " & @UserName & " werden gesucht, auf Server " & $LogonServer)_WriteLogData("Funktionsaufruf lautet : " & $adoCmd & " ")
$objectList = $adoCmd.Execute
GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Ein Moment bitte," & @CRLF & @CRLF & "Ihre Benutzereinträge werden gesucht.")
$Counter = 1
While Not $objectList.EOF()
$user = ObjGet($objectList.Fields("ADsPath").value)
$samAccountName = $User.samAccountName
If stringlower($samAccountName) = StringLower($AnmeldeUser) Then
$UserAccountControl = $user.UserAccountControl $FirstName = $User.FirstName $LastName = $User.LastName $title = $User.title $PasswordLastChanged = $User.PasswordLastChanged ;pwdLastSet $IsAccountLocked = $User.IsAccountLocked_WriteLogData("Benutzereintrag für " & $FirstName & " " & $LastName & " wurde gefunden. Accountcontrol = " & $UserAccountControl) $DaysLeft = _DatumBerechnen($PasswordLastChanged)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If $DaysLeft <= 10 Then
[/autoit] [autoit][/autoit] [autoit]
Switch $DaysLeft Case 1 GUICtrlSetBkColor($lbl_info, 0xf20000) MsgBox (16, "Achtung","Ihr Passwort läuft heute ab" & @CRLF & @CRLF & "Bitte ändern Sie das Passwort umgehend!") Case 2 GUICtrlSetBkColor($lbl_info, 0xFF9900) MsgBox (48, "Achtung","Ihr Passwort läuft morgen ab" & @CRLF & @CRLF & "Bitte ändern Sie das Passwort!") Case Else GUICtrlSetBkColor($lbl_info, 0xFFFF00) MsgBox(64,"Achtung","Ihr Passwort läuft in " & $DaysLeft & " Tagen, am " & $AnzeigeDatPwdExpires & ", ab." & @CRLF & @CRLF & "Bitte ändern Sie das Passwort bei der nächsten Gelegenheit!") EndSwitch
GUICtrlSetBkColor($lbl_info, 0xD7E4F2) EndIf EndIf $objectList.MoveNext() $Counter += 1Wend
[/autoit] [autoit][/autoit] [autoit]If $DaysLeft > 10 Then GUICtrlSetBkColor($lbl_info, 0xDAF2D7) GUICtrlSetData($lbl_info, @CRLF & "Information!"& @CRLF & @CRLF & "Ihr Passwort ist noch " & $DaysLeft &" Tage gültig, " & @CRLF & "es läuft am " & $AnzeigeDatPwdExpires & " ab." & @CRLF & "Es ist nicht erforderlich das Passwort zu ändern.") Sleep(5000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
EndIf GUICtrlSetData($lbl_info, @CRLF & @CRLF & @CRLF &"Suche nach Benutzerdaten abgeschlossen.") Sleep(500) GUICtrlSetBkColor($lbl_info, 0xD7E4F2) GUICtrlSetData($lbl_info, @CRLF & @CRLF & @CRLF &"Verbindung der Netzlaufwerke wird vorbereitet.")
$UserAccountControl=""$samAccountName=""$FirstName=""$LastName=""$title=""$PasswordLastChanged=""$IsAccountLocked=""$DaysLeft=""$msg=""$icon=""$AnzeigeDatPwdExpires=""$Counter=""EndFunc -
Hi,
ich bin gerade etwas erschüttert, wenn ich mein Script ausführe bekomme ich diese Meldung:
[autoit]>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\a-b.wagener\Desktop\Connect V. 1.1\COOConnect.au3" /UserParams +>14:47:31 Starting AutoIt3Wrapper v.2.1.4.4 SciTE v.3.3.7.0 ; Keyboard:00000407 OS:WIN_81/ CPU:X64 OS:X64 Environment(Language:0407 Keyboard:00000407 OS:WIN_81/ CPU:X64 OS:X64)>Running AU3Check (3.3.10.2) from:C:\Program Files (x86)\AutoIt3"C:\Users\a-b.wagener\Desktop\Connect V. 1.1\AD.au3"(4128,68) : warning: $__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM: possibly used before declaration. _WinAPI_FormatMessage($__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^"C:\Users\a-b.wagener\Desktop\Connect V. 1.1\AD.au3"(4128,68) : error: $__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM: undeclared global variable. _WinAPI_FormatMessage($__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^"C:\Users\a-b.wagener\Desktop\Connect V. 1.1\AD.au3"(985,55) : error: _ArrayCreate(): undefined function. $oAD_Group.GetInfoEx(_ArrayCreate("primaryGroupToken") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^C:\Users\a-b.wagener\Desktop\Connect V. 1.1\COOConnect.au3 - 2 error(s), 1 warning(s)!>14:47:32 AU3Check ended. Press F4 to jump to next error.rc:2+>14:47:32 AutoIt3Wrapper Finished..>Exit code: 2 Time: 0.639
[/autoit]Das hat immer funktioniert.
kann mir jemand sagen was ich da deklarieren muss? -
Wir kommen der Sache näher:
So siehts aus:Spoiler anzeigen
[autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
_GetTrayMessage() Sleep(1000)WEnd
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _GetTrayMessage()
[/autoit] [autoit][/autoit] [autoit]
Local $wl, $List, $LastList = ''
$List = '' $wl = WinList("[class:tooltips_class32]")
For $n = 1 To $wl[0][0] If BitAND(WinGetState($wl[$n][1]), 2) Then $List &= WinGetTitle($wl[$n][1]) EndIf Next If $List =("Dienste verbunden") Then _CreateGUI() _MapDrive() EndIfEndFunc
[/autoit]Wie verlasse ich die While Schleife wenn die "Dienste verbunden" wurden?
-
Hi,
wir sind dabei auf einen neue Firewall umzustellen die einen eigenen Client mitbringt. Dieser Client liegt als Tray in der Taskbar und wird auch von da gesteuert. Gibt es eine Möglichkeit einen TrayTip zu überwachen?
Also wenn Traytip mit der und der Message kommt dann mach dies und jenes.EDIT:
Hab was gefunden:
[ neu ] Tooltip (Win Tool Tips auslesen)das muss ich dann nur so weit umbiegen dass es nicht in die Konsole geschrieben wird sondern abgefragt.
EDIT2:
Um das mal genauer zu erklären.
Ich hätte gerne dass das programm im Hintergrund läuft und nichts macht bis das TryTip "Verbunden" erscheint und dann los legt mit verschiedenen Funktionen.
Noch krieg ich das aber nicht so hin.
Mein kläglicher Versuch bisher:Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]
While 1 Sleep(100) ; Sleep to reduce CPU usageWEnd
Func GP_Connect()_GetTrayMessage()EndFuncFunc _GetTrayMessage() Local $wl, $List, $LastList = ''
[/autoit] [autoit][/autoit] [autoit]While 1 $List = '' $wl = WinList("[class:tooltips_class32]");get all th etooltips
[/autoit]
For $n = 1 To $wl[0][0] If BitAND(WinGetState($wl[$n][1]), 2) Then;if visible $List &= WinGetTitle($wl[$n][1]); read the title, which for a tooltip is the text EndIf Next If $List =("Verbunden") Then MsgBox(0,"","Tadaaaa") EndIf;~ If $List <> $LastList And $List <> '' Then;~ ConsoleWrite($List & @CRLF);~ $LastList = $List;~ EndIfWEnd
EndFunc ;==>_Exit
ich erinnere mich dunkel dass sowas mit dem OnEventMode gehen müsste.
GUIOnEventMode ist aber Quastch oder? Dazu bräuchte ich ja eine Gui.
Kann mir da mal jemand auf die Sprünge helfen?
Das Problem ist dass ich kein Entwickler bin, ich hab zwar in grauer Vorzeit mal programmieren gelernt aber brauch es auch nur alle jubeljahre mal :pinch: -
Danke euch.
Ich wühl mich da mal durch -
Falls sich noch jemand findet der gewillt ist Fragen zu beantworten:
kann es sein dass es mit komprimierten Dateien generell nicht geht?
-
Das hab ich auch gefunden.
Die Frage ist aber welchen Codec ich brauche das steht da ja nunmal nicht.
Die Datei die ich abspielen will hat offensichtlich den falschen Codec.
Ich dachte immer Foren wären dazu da um Fragen zu stellen. Wenns eure Zeit nicht zulässt die zu beantworten dann lasst es einfach bleiben.
-
Naja, die Frage war eher welchen Codec ich brauche.

-
Hi,
ich würde gerne mit GUICtrlCreateAvi eine AVI Datei abspielen.
Bekomme aber diesen Fehler:
[Blockierte Grafik: http://img21.myimg.de/avi55088c580b.png]
Snippet:Spoiler anzeigen
[autoit]Example()
[/autoit]
Func Example() Local $avi, $buttonstart, $buttonstop, $msg
GUICreate("GUICtrlCreateAvi-Tut", 360, 200) $avi = GUICtrlCreateAvi(@ScriptDir & "\RDgo.avi", 10, 10, 10) $buttonstart = GUICtrlCreateButton("Start", 95, 150, 75, 22) $buttonstop = GUICtrlCreateButton("Stopp", 195, 150, 75, 22)
GUISetState() ; Die Schleife wiederholt sich, bis der Benutzer eine Beenden-Aktion auslöst While True $msg = GUIGetMsg() Switch $msg Case -3 ExitLoop Case $buttonstart GUICtrlSetState($avi, 1) Case $buttonstop GUICtrlSetState($avi, 0) EndSwitch WEndEndFunc ;==>Example; EndeKann mir jemand sagen welchen Codec das avi File haben muss?
-
Ich hab ein bißchen aufgeräumt. Man möge mir das Pushen nachsehen aber ich habe noch ein anderes Problem entdeckt.
Hintergrund.
Es gibt ein Tool das eine VPN verbindung aufbaut, bunte Bildchen in einer GUI zeigt und die Funktion aus diesem Script aufruft.
Getrennt habe ich das wegen der seperaten Updatemöglichkeit.
Ich hab doch richtig verstanden dass es dann bei jeder Programmausführung neu includet wird oder? Wird das vielleicht irgendwo gecacht?Je nach AD Grupopenzugehörigkeit werden Netzlaufwerke gemappt.
So siehts momentan aus:
Spoiler anzeigen
[autoit]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_Icon=Data\netzlaufwerk.ico
#AutoIt3Wrapper_Outfile=Mapping.exe
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <AD.au3>
#include <Array.au3>
;~ #include <WriteLogData.au3>
;~ #include <GUIConstantsEx.au3>;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------;~ Damit man sich im Code nicht den Wolf sucht wenn mal was geändert wird packe ich die Netzwerkpfade in Variablen. Also muss es wenn nur hier geändert werden.
[/autoit] [autoit][/autoit] [autoit]
;~ Das Kommentar falls ich es vergesse oder falls es mal jemand anderes macht und nicht weiss was das soll:-)$G_CPP = ("\\XYZ\dfs\Abteilung")
[/autoit] [autoit][/autoit] [autoit]
$H_CPP = ("\\XYZ\dfs\Home$\" & @UserName)Func _MapDrives()
[/autoit] [autoit][/autoit] [autoit]_AD_Open()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$aUser = _AD_GetUserGroups(@UserName)
_AD_Close()If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Ihre Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Bitte gedulden Sie sich einen Moment.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Ihre Netzlaufwerke werden verbunden," & @CRLF & "Bitte gedulden Sie sich einen Moment.")
Sleep(1000)EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ ------------------------------------------------------------------------------------------------Laufwerk G: XYZ----------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ArraySearch($aUser, "CN=Mitarbeiter_XYZ" , 0, 0, 0, 1)
$Laufwerk = "G:"If Not @error Then
[/autoit] [autoit][/autoit] [autoit]If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
EndIfDriveMapDel($Laufwerk)
[/autoit] [autoit][/autoit] [autoit]
_WriteLogData("Laufwerk "&$Laufwerk&" getrennt.")$count =0
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]DriveMapAdd($Laufwerk, $G_XYZ)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]If @error Then
[/autoit] [autoit][/autoit] [autoit]
$count +=1
_WriteLogData("Laufwerk "&$Laufwerk&" nicht verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIfUntil $count >= 3
[/autoit] [autoit][/autoit] [autoit]If $count >=3 Then
[/autoit] [autoit][/autoit] [autoit]$Error = @error
[/autoit] [autoit][/autoit] [autoit]
_ErrorLog($Error, $Laufwerk)
MsgBox(48,"Netzlaufwerkverbindung fehlgeschlagen", "Laufwerk: " & $Laufwerk & " konnte nicht verbunden werden." & @CR & _
"Bitte wenden Sie sich an den IT Support.")Else
[/autoit] [autoit][/autoit] [autoit]$Error = ""
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = ""EndIf
[/autoit] [autoit][/autoit] [autoit]If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk "&$Laufwerk&" erfolgreich verbunden.")
Sleep(250)
_WriteLogData("Laufwerk "&$Laufwerk&" verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk "&$Laufwerk&" verbunden.")
Sleep(250)
_WriteLogData("Laufwerk "&$Laufwerk&" aus Childform verbunden.")
EndIfEndIf
[/autoit] [autoit][/autoit] [autoit];~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ ------------------------------------------------------------------------------------------------Laufwerk H: XYZ----------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------_ArraySearch($aUser, "CN=Mitarbeiter_XYZ" , 0, 0, 0, 1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Laufwerk = "H:"If Not @error Then
[/autoit] [autoit][/autoit] [autoit]If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
EndIfDriveMapDel($Laufwerk)
[/autoit] [autoit][/autoit] [autoit]
_WriteLogData("Laufwerk "&$Laufwerk&" getrennt.")$count =0
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]DriveMapAdd($Laufwerk, $H_XYZ)
[/autoit] [autoit][/autoit] [autoit]Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]If @error Then
[/autoit] [autoit][/autoit] [autoit]
$count +=1
_WriteLogData("Laufwerk "&$Laufwerk&" nicht verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIfUntil $count >= 3
[/autoit] [autoit][/autoit] [autoit]If $count >=3 Then
[/autoit] [autoit][/autoit] [autoit]$Error = @error
[/autoit] [autoit][/autoit] [autoit]
_ErrorLog($Error, $Laufwerk)
MsgBox(48,"Netzlaufwerkverbindung fehlgeschlagen", "Laufwerk: " & $Laufwerk & " konnte nicht verbunden werden." & @CR & _
"Bitte wenden Sie sich an den IT Support.")Else
[/autoit] [autoit][/autoit] [autoit]$Error = ""
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = ""EndIf
[/autoit] [autoit][/autoit] [autoit]If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk "&$Laufwerk&" erfolgreich verbunden.")
Sleep(250)
_WriteLogData("Laufwerk "&$Laufwerk&" verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk "&$Laufwerk&" verbunden.")
Sleep(250)
_WriteLogData("Laufwerk "&$Laufwerk&" aus Childform verbunden.")
EndIfEndIf
[/autoit] [autoit][/autoit] [autoit];~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[/autoit]
EndFuncDas wiederholt sich je nach AD gruppenzugehörigkeit noch für andere Laufwerke. Das hier ist nur ein Ausschnitt aber der Code ist immer der selbe.
Jetzt habe ich zwei Probleme.
Erstens bleibt das Script manchmal nach verbindung von Laufwerk G hängen und überspringt Laufwerk H: Im Log steht aber dass es verbunden wurde. Also funktioniert auch die Do Schleife nicht.
Nur sehe ich nicht warum. Sieht es einer von euch?Also das Script bleibt bei der Verbindung von Laufwerk H: hängen.
Wenn ich in dem Moment ein netuse in der DOS BOX abfeuere wird H: sofort verbunden.Sieht einer einen ehler warunm das Script an dieser Stelle manchmal nicht reagiert?
-
Hi, ich bin immer noch ein meinem VPN Tool. Das Netzlaufwerke verbinden läuft alles über ein Script das die AD Gruppe abfragt und dementsprechen die Laufwerke verbindet.
Das alle ssieht so aus:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Func _MapDrives()_AD_Open()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$aUser = _AD_GetUserGroups(@UserName)
_AD_Close()If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Ihre Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Bitte gedulden Sie sich einen Moment.")
EndIf;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
;Laufwerke G:\ und H:\ für User mappen
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ArraySearch($aUser, "CN=Mitarbeiter" , 0, 0, 0, 1)
If Not @error ThenDriveMapDel("G:")
[/autoit] [autoit][/autoit] [autoit]
_WriteLogData("Laufwerk G:\ getrennt.")
DriveMapDel("H:")
_WriteLogData("Laufwerk H:\ getrennt.")$count =0
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = "G:\"
Do
DriveMapAdd("G:", $G_CPP)If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
EndIf
[/autoit] [autoit][/autoit] [autoit]
$Error = @errorIf @error Then
[/autoit] [autoit][/autoit] [autoit]
$count +=1
_WriteLogData("Laufwerk G:\ nicht verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIfUntil $count >= 3
[/autoit] [autoit][/autoit] [autoit]If $count >=3 Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_ErrorLog($Error, $Laufwerk)
[/autoit] [autoit][/autoit] [autoit]
MsgBox(48,"Netzlaufwerkverbindung fehlgeschlagen", "Laufwerk: " & $Laufwerk & " konnte nicht verbunden werden." & @CR & _
"Bitte wenden Sie sich an den IT Support.")Else
[/autoit] [autoit][/autoit] [autoit]$Error = ""
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = ""If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk G:\ erfolgreich verbunden.")
Sleep(250)
_WriteLogData("Laufwerk G:\ verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk G:\ verbunden.")
Sleep(250)
_WriteLogData("Laufwerk G:\ aus Childform verbunden.")
EndIfEndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$count =0
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Do
DriveMapAdd("H:", $H_CPP)
$Laufwerk = "H:\"
If WinActive ("Connect") Then
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk "&$Laufwerk&" wird verbunden.")
Sleep(250)
_WriteLogData("Laufwerk " &$Laufwerk&" wird verbunden.")
EndIf$Error = @error
[/autoit] [autoit][/autoit] [autoit]If @error Then
[/autoit] [autoit][/autoit] [autoit]
$count +=1
_WriteLogData("Laufwerk H:\ nicht verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIfUntil $count >= 3
[/autoit] [autoit][/autoit] [autoit]If $count >=3 Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_ErrorLog($Error, $Laufwerk)
[/autoit] [autoit][/autoit] [autoit]
MsgBox(48,"Netzlaufwerkverbindung fehlgeschlagen", "Laufwerk: "& $Laufwerk & " konnte nicht verbunden werden." & @CR & _
"Bitte wenden Sie sich an den IT Support.")Else
[/autoit] [autoit][/autoit] [autoit]$Error = ""
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = ""If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk H:\ erfolgreich verbunden.")
Sleep(250)
_WriteLogData("Laufwerk H:\ verbunden.")
ElseIf WinActive ("VPN Verbindungsstatus") Then
ControlSetText("VPN Verbindungsstatus","",7, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk H:\ verbunden.")
Sleep(250)
_WriteLogData("Laufwerk H:\ aus Childform verbunden.")
EndIf
EndIfEndIf
[/autoit]Das ganze wiederholt sich noch ein paar mal je nach Gruppenzugehörigkeit.
So jetzt stelle ich beim testen fest dass die exe manchmal scheinbar hängt nach der Meldung Laufwerk XY erfolgreich verbunden.
Der Efffekt ist dann dass das Laufwerk schlicht und einfach nicht verbunden wurde. Im Log steht aber das es verbunden wurde.Also hab ich wahrscheinlich einen Fehler eingebaut den ich aber nicht finde. Sieht ihn einer von euch? Oder hat jemand eine andere Erklärung? Wir haben immer wieder mal das Phänomen dass einzelne Laufwerke nicht verbunden werden. Ob nun per Autoit, Batch, oder vbs Script.
Unsere Theorie ist dass die Netzwerkverbindung (u.U. UMTS) einfach zu langsam ist und das alles in einen Timeout läuft.
Gibt es noch andere Möglichkeiten die hier nur keiner kennt oder die keinem einfallen?Das wollte ich mit meinem Script eigentlich abfangen, aber besonders erfolgreich war es nicht

Hier mal ohne die Ausgaben in der GUI ist etwas übersichtlicher:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Func _MapDrives()_AD_Open()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$aUser = _AD_GetUserGroups(@UserName)
_AD_Close()If WinActive ("Connect") Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ControlSetText("Connect","",5,@CRLF & @CRLF & "Ihre Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Bitte gedulden Sie sich einen Moment.")
EndIf;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
;Laufwerke G:\ und H:\ für User mappen
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ArraySearch($aUser, "CN=Mitarbeiter" , 0, 0, 0, 1)
If Not @error ThenDriveMapDel("G:")
[/autoit] [autoit][/autoit] [autoit]
_WriteLogData("Laufwerk G:\ getrennt.")
DriveMapDel("H:")
_WriteLogData("Laufwerk H:\ getrennt.")$count =0
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = "G:\"
Do
DriveMapAdd("G:", $G_CPP)
[/autoit] [autoit][/autoit] [autoit]
$Error = @errorIf @error Then
[/autoit] [autoit][/autoit] [autoit]
$count +=1
_WriteLogData("Laufwerk G:\ nicht verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIfUntil $count >= 3
[/autoit] [autoit][/autoit] [autoit]If $count >=3 Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_ErrorLog($Error, $Laufwerk)
[/autoit] [autoit][/autoit] [autoit]
MsgBox(48,"Netzlaufwerkverbindung fehlgeschlagen", "Laufwerk: " & $Laufwerk & " konnte nicht verbunden werden." & @CR & _
"Bitte wenden Sie sich an den IT Support.")Else
[/autoit] [autoit][/autoit] [autoit]$Error = ""
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = ""
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndIf$count =0
[/autoit] [autoit][/autoit] [autoit]
Do
DriveMapAdd("H:", $H_CPP)
$Laufwerk = "H:\"$Error = @error
[/autoit] [autoit][/autoit] [autoit]If @error Then
[/autoit] [autoit][/autoit] [autoit]
$count +=1
_WriteLogData("Laufwerk H:\ nicht verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIfUntil $count >= 3
[/autoit] [autoit][/autoit] [autoit]If $count >=3 Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_ErrorLog($Error, $Laufwerk)
[/autoit] [autoit][/autoit] [autoit]
MsgBox(48,"Netzlaufwerkverbindung fehlgeschlagen", "Laufwerk: "& $Laufwerk & " konnte nicht verbunden werden." & @CR & _
"Bitte wenden Sie sich an den IT Support.")Else
[/autoit] [autoit][/autoit] [autoit]$Error = ""
[/autoit] [autoit][/autoit] [autoit]
$Laufwerk = ""EndIf
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit]EDIT: Also ich bin das gerade am testen. Ich hab nach jedem DriveMapadd noch ein Sleep(1000) eingebaut. Ab und an bekomme ich von dem Programm keine Rückmeldung. Dann wird in dem Besipiel7 jetzt laufwerk H übersprungen. Im Log steht dann Laufwerk H getrennt un d es geht mit dem nächsten weiter.
Kann ich das "Keine Rückmeldung" irgendwie abfangen?
-
Hi,
kann man das Trayicon irgendwie so "erstellen" dass es bei Windows 7 automatisch in der Taskleiste angezegt wird und nicht erst "aktiviert" werden muss?
-
eben das war ja mein Problem, dass es keine ersion bei ner Textdatei gibt.
Stringe auslesen werd ich mal testen. Momentan frag eich das Änderungsdstum ab. Wenn das neuer ist als dass der "laufenden Version" wird das Ding upgedatet.Wenn jamand weiss was gegen das Änderungsdatum spricht immer raus damit.
-
Da gibts nur eins: schreib die Version als Kommentar rein, am besten als erste Zeile.
[autoit]
[/autoit]
;Version=01.08.15e
Ich glaube allerdings nicht, dass ein Script sich selbst lesen, überschreiben und dann neu starten kann...
Der übliche Trick wäre ein zweites Script, das nur zum starten/updaten dient.
Das funktioniert nicht:-(
ZUmindest bekomme ich mit FileGetVersion nix angezeigt. -
Tut es. Danke!