Es nimmt vorm an und gefällt mir bisher gut.
Einen kleinen Schönheitsfehler hab ich aber meiner Meinung nach noch,
zu diesem Timer hab ich schonmal einen Thread eröffnet und Dank eurer Hilfe ging es dann auch:
https://autoit.de/index.php/Thre…4999#post364999
Aber ich hab es nie wirklich verstanden und es ist auch zu lange her.
Spoiler anzeigen
#include <Array.au3>
#include <ad.au3>
#include <MsgBoxConstants.au3>
#include <WriteLogData.au3>
Global $StartFlag, $traygpupdate,$traymapping,$traycapture,$trayteamviewer, $trayticket,$traypassword, $is_member
Global $aArray = IniReadSection(@ScriptDir &"\netzlaufwerke.ini", "Groups")
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Header in die Log Datei schreiben
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_WriteLogData("######################################################################################################################")
_WriteLogData("")
_WriteLogData("")
_WriteLogData("-----------------------------------------------neue Verbindung--------------------------------------------------------")
_WriteLogData("")
_WriteLogData("")
_WriteLogData("----------------------------------------------------------------------------------------------------------------------")
_WriteLogData("Programm : " & @ScriptName & ". Version=" & FileGetVersion(@ScriptName) & " mit Datum=" & FileGetTime(@ScriptName, 1, 1))
_WriteLogData("Benutzer : " & @UserName)
_WriteLogData("LogonServer : " & @LogonServer)
_WriteLogData("LogonDomain : " & @LogonDomain)
_WriteLogData("LogonDNSDomain : " & @LogonDNSDomain)
_WriteLogData("Computername : " & @ComputerName )
_WriteLogData("IP : " & @IPAddress1 & ", " &@IPAddress2& ", " &@IPAddress3& ", " & @IPAddress4)
_WriteLogData("----------------------------------------------------------------------------------------------------------------------")
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Programmstart
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ $Updateflag = False
_TrayMenue()
$StartFlag = False
Global $iTimer = TimerInit(), $iTimerDiff = 0
Global $aFunktions[2][3] = [['_VerbindungsStatus', 20000, 1], [ '_FuncDrives', 25000, 1]]
HotKeySet("+!e", "_QuitConnect") ; Shift-Alt-e beendet die Connect
_AD_Open()
For $i = 1 To $aArray[0][0]
$is_member = 0
$is_member = _AD_IsMemberOf($aArray[$i][1], @UserName)
If $is_member = 1 Then
$aArray_MAPDRIVE = IniReadSection(@ScriptDir &"\netzlaufwerke.ini", $aArray[$i][1])
;~ _ArrayDisplay ($aArray_MAPDRIVE)
EndIf
Next
_AD_Close()
While Sleep(100)
;~ $tray= _GetTrayMessage();Warte auf Dienste verbunden Traytip
If ($StartFlag = FALSE) then
_VerbindungsStatus()
_FuncDrives()
;~ MsgBox(0,"Start","Laufwerke verbinden")
$StartFlag = TRUE
EndIf
$msgtray = TrayGetMsg()
Select
Case $msgtray=$traymapping
;~ _FuncDrives()
Case $msgtray= $traycapture
Run("Capture.exe")
Case $msgtray= $trayteamviewer
Run("C:\IT\TeamviewerQS_de.exe")
Case $msgtray= $trayticket
ShellExecute("http://it-support." & @LogonDNSDomain)
Case $msgtray= $traygpupdate
$gpupdate = Run("gpupdate", "", @SW_HIDE)
If $gpupdate > 0 Then
TrayTip("Bitte warten", "gpupdate wird ausgeführt.",1,1)
Sleep(2000)
TrayTip("Fertig", "gpupdate wurde ausgeführt.",1,1)
Endif
Case $msgtray= $traypassword
_password()
EndSelect
$iTimerDiff = TimerDiff($iTimer)
For $i = 0 To UBound($aFunktions) - 1 ; hier werden alle Funktionen aus dem Array überprüft
If $iTimerDiff / $aFunktions[$i][1] > $aFunktions[$i][2] Then ; ist die TimerDifferenz geteilt durch die Millisekunden größer als der Counter, dann...
;~ ConsoleWrite(StringFormat('+> Zeit: %i Sek., Aufruf Nr.: %i, Starte Funktion: "%s"\n', Int($iTimerDiff / 1000), $aFunktions[$i][2], $aFunktions[$i][0]))
$aFunktions[$i][2] += 1 ; den Counter erhöhen
Call($aFunktions[$i][0]) ; und die Funktion aufrufen
EndIf
Next
WEnd
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Tray Menü
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _TrayMenue()
Opt("TrayMenuMode", 3) ; Default tray menu items (Script Paused/Exit) will not be shown.
TraySetIcon(@ScriptDir& "\Data\x.ico")
;~ $trayinfo = TrayCreateItem("Computerinformationen anzeigen")
;~ TrayCreateItem("")
$traygpupdate = TrayCreateItem("gpupdate ausführen")
TrayItemSetState($traygpupdate,128)
TrayCreateItem("")
$traymapping = TrayCreateItem("Laufwerke verbinden")
TrayItemSetState($traymapping,128)
TrayCreateItem("")
$traycapture = TrayCreateItem("Screenshot an IT senden.")
TrayItemSetState($traycapture,128)
TrayCreateItem("")
$trayteamviewer = TrayCreateItem("Teamviewer starten.")
TrayCreateItem("")
$trayticket = TrayCreateItem("Ticketsystem starten.")
TrayItemSetState($trayticket,128)
TrayCreateItem("")
$traypassword = TrayCreateItem("Wann läuft mein Passwort ab?")
TrayItemSetState($traypassword,128)
TrayCreateItem("")
TrayCreateItem("Connect Version 3.0")
TrayItemSetState(-1,128)
EndFunc
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; GetTrayMessage
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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
Return 1
EndIf
EndFunc ;==>_GetTrayMessage
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Verbindungsstatus
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _VerbindungsStatus()
;~ MsgBox(0,"","VPNStatus",1)
;~ VPN und Netzwerkgeschwindigkeit ermitteln und Trayicon ensprechend einfärben
local $Testserver = @LogonDNSDomain
$Connection = Ping($Testserver, 5000)
$internetconnection= "www.google.de"
;~ ConsoleWrite("Speed "& $Connection & @CR)
If $internetconnection <= 0 Then ;~ wird nur gemacht wenn eine Internetverbindung besteht
TraySetIcon(@ScriptDir& "\Data\x.ico")
TraySetToolTip("Keine Verbindung zum Internet." & @CRLF & "Stellen Sie bitte eine verbindung zum Internet her.")
If $Connection = 0 Then
TraySetIcon(@ScriptDir& "\Data\x.ico")
;~ _WriteLogData("Fehler bei ping auf LogondnsDomaiun " & @error)
TraySetToolTip("Keine Verbidnung zu COO." & @CRLF & "Bauen Sie die Verbindung bitte mit dem Palo Alto Client auf.")
EndIf
If $Connection > 0 Then
;~ TrayItems aktivieren wenn verbindung zum COO besteht. Sonst funktioniert das eh alles nicht
TrayItemSetState($traygpupdate,64)
TrayItemSetState($trayticket, 64)
TrayItemSetState($traymapping,64)
TrayItemSetState($traycapture,64)
TrayItemSetState($traypassword,64)
TraySetIcon(@ScriptDir& "\Data\green.ico")
EndIf
EndIf
$Connection=""
$netlogon=""
$Testserver=""
EndFunc
;~ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _FuncDrives()
_CheckDrives($aArray_MAPDRIVE)
EndFunc
;~ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _checkDrives($aArray_MAPDRIVE)
;~ Laufwerke checken
;~ MsgBox(0,"_checkDrives","",1)
;~ _ArrayDisplay($aArray_MAPDRIVE)
$Testserver = @LogonDNSDomain
$Ping = Ping($Testserver,1000)
For $x = 1 To $aArray_MAPDRIVE[0][0]
;MsgBox(0,$is_member, $aArray_MAPDRIVE[$i][1])
$map_details = StringSplit($aArray_MAPDRIVE[$x][1],"|")
$map_details[1] = StringReplace($map_details[1], "*USER*", @username)
$Laufwerk =($map_details[2] & ":")
;~ MsgBox(0,"Laufwerk", $Laufwerk,1)
$Pfad =($map_details[1])
;~ MsgBox(0,"Pfad ", $Pfad,1)
If $Ping > 0 Then
$Status=DriveStatus($Laufwerk)
;~ MsgBox(0,"",$Status & " " & $Laufwerk,1)
If $Status = "INVALID" Then
$count =0
Do
_MapDrives($Laufwerk,$Pfad)
Sleep(1000)
If @error Then
$Error = @error
MsgBox(0,"",$Error)
$count +=1
_WriteLogData("Laufwerk " & $Laufwerk &" nicht neu verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIf
Until $count >= 3
If $count >=3 Then
$Error = @error
;~ _ErrorLog($Error, $Laufwerk)
Else
$Error = ""
EndIf
EndIf
$Status = ""
$Laufwerk = ""
$count= 0
$Drive=""
EndIf
Next
EndFunc
;~ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _MapDrives ($Laufwerk,$Pfad)
;~ Laufwerke verbinden
DriveMapAdd($Laufwerk, $Pfad)
EndFunc
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ Func _Laufwerk_trennen($Laufwerk)
;~ $Status=DriveStatus($Laufwerk)
;~ If $Status <> "INVALID" Then
;MsgBox(0,"",$Status)
; TrayTip("Verbindung beendet","Ihre Netzlaufwerke werden getrennt",1)
;~ DriveMapDel($Laufwerk)
;~ _WriteLogData("Laufwerk " & $Laufwerk & " getrennt.")
;~ EndIf
;~ $Laufwerk = ""
;~ $Status = ""
;~ $Drive = ""
;~ Sleep(500)
;~ EndFunc
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _password()
;~ Benutzeraten aus Abfragen, wichtig für "Passwort läuft ab" Anzeigen
Global $UserAccountControl, $samAccountName,$FirstName, $LastName, $title, $PasswordLastChanged, $IsAccountLocked, $DaysLeft,$msg,$icon ,$AnzeigeDatPwdExpires, $Counter, $baseStr
Local $Found = 0
$AnmeldeUser = @UserName
$LogonServer = @LogonDomain
$serverName = $LogonServer
$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
$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)
If $DaysLeft <= 10 Then
Switch $DaysLeft
Case 1
MsgBox (16, "Achtung","Ihr Passwort läuft heute ab" & @CRLF & @CRLF & "Bitte ändern Sie das Passwort umgehend!")
Case 2
MsgBox (48, "Achtung","Ihr Passwort läuft morgen ab" & @CRLF & @CRLF & "Bitte ändern Sie das Passwort!")
Case Else
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
EndIf
EndIf
$objectList.MoveNext()
$Counter += 1
Wend
$UserAccountControl=""
$samAccountName=""
$FirstName=""
$LastName=""
$title=""
$PasswordLastChanged=""
$IsAccountLocked=""
$DaysLeft=""
$msg=""
$icon=""
$AnzeigeDatPwdExpires=""
$Counter=""
EndFunc
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Kennwort "Lebensdauer" berechnen
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _DatumBerechnen($ChangedDate)
;~ wird von _GetUserAD gebraucht
local $AnzeigeDatPwdChanged, $Day2Change, $Date2Change
local $HeuteJMT = _NowCalcDate()
local $DatChangedJMT = StringMid( $ChangedDate, 1, 4) & "/" & StringMid( $ChangedDate, 5, 2) & "/" & StringMid( $ChangedDate, 7, 2)
$Date2Change = _DateAdd('d',90,$DatChangedJMT)
$Day2Change = _DateDiff( 'd',_NowCalc(),$Date2Change)
$AnzeigeDatPwdExpires = StringMid( $Date2Change, 9, 2) & "." & StringMid( $Date2Change, 6, 2) & "." & StringMid( $Date2Change, 1, 4)
Return $Day2Change
_WriteLogData("Passwort Ablaufdatum emittelt")
$AnzeigeDatPwdChanged=""
$Day2Change=""
$Date2Change=""
$HeuteJMT=""
$ChangedDate=""
$DatChangedJMT=""
EndFunc
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _QuitConnect()
TrayTip("Connect beenden", "Connect wird beendet.",2,2)
Sleep(2000)
Exit
EndFunc
Alles anzeigen
So ieht das ganze Teil aus, wenn es noch wer brauchen kann bedient euch
Was mir nicht gefällt ist das hier:
Eine Funktion aufzurufen um eine Funktion aufzurufen ist irgendwie
Wenn ich
_CheckDrives($aArray_MAPDRIVE)
mit hierein schreibe geht es natürlich nicht
Global $aFunktions[2][3] = [['_VerbindungsStatus', 20000, 1], [ '_CheckDrives($aArray_MAPDRIVE)', 25000, 1]]
Zumindest nicht wenn ich das Array mit übergeben will.
Also wenn jemand Lust und Muße hat sich das anzusehen und mir zu zeigen wie es wesentlich eleganter geht nehme ich diese positive Kritik gerne an.
Anderweitige Verbesserungsvorschläge natürlich auch
Für dieses etwas klobige Passwort berechnen hab ich diesen Thread:
https://autoit.de/index.php/Thre…6927#post676927
Wenn ich den gelöscht bekomme häng ich ihn hier ran, oder einer der Admins?
Wenn nicht bitte ich um nachsicht für dieses Halb-X-Posting.