#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Data\domain1icon.ico
#AutoIt3Wrapper_Outfile=exe\Connect.exe
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Comment=Connect stellt eine VPN Verbindung zu domain1 her.
#AutoIt3Wrapper_Res_Description=Connect
#AutoIt3Wrapper_Res_Fileversion=1.1.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Copyright © 2010 IT
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;~ #AutoIt3Wrapper_Outfile_x64=domain1Connect.exe
#cs ----------------------------------------------------------------------------

	AutoIt Version: 3.3.1.8
    Author:         Boris Wagener

    Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <date.au3>
#include <WriteLogData.au3>
#include <AD.au3>
#include <Array.au3>



;~ Opt("TrayMenuMode", 1)

;~ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ 										Variablendeklaration
;~ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Global $Mainform, $Childform, $fortschritt, $Pic1, $lbl_fortschritt, $lbl_info2,$Label2,$Label3,$State, $count, $Error, $aUser,$baseStr,$traypassword, $traygpupdate
Global $Einwahluser, $Input_user,  $User, $lbl_passwort, $btn_trennen, $Laufwerk, $btn_ticket, $Drive, $domain2_Alle, $QPP
Global $Label1, $Group1, $chk_showpw, $lbl_ip, $FileName, $DownloadDir, $Warnung, $traymapping, $trayticket, $traytrennen, $msgtray, $trayausblenden, $trayeinblenden
Global $UpdateMappingJaNein, $MappingUpdateWait, $ConnectUpdateWait, $Connectdomain2, $PingOnServer1, $VPNbesteht,$btn_mapping, $List, $string, $VPN_connection, $Testserver, $erg

Global $G_CPP					= 	IniRead(@ScriptDir & "\drives.ini","Drives", "G_CPP","")
Global $H_CPP					= 	IniRead(@ScriptDir & "\drives.ini","Drives", "H_CPP","")
Global $O_Betriebsrat			=	IniRead(@ScriptDir & "\drives.ini","Drives", "O_Betriebsrat","")
Global $L_Buchhaltung			=	IniRead(@ScriptDir & "\drives.ini","Drives", "L_Buchhaltung","")
Global $M_Buchhaltung			=	IniRead(@ScriptDir & "\drives.ini","Drives", "M_Buchhaltung","")

Global $R_domain2					=	IniRead(@ScriptDir & "\drives.ini","Drives", "R_domain2","")
Global $S_domain2					=	IniRead(@ScriptDir & "\drives.ini","Drives", "S_domain2","")
Global $T_domain2					=	IniRead(@ScriptDir & "\drives.ini","Drives", "T_domain2","")
Global $W_domain2					=	IniRead(@ScriptDir & "\drives.ini","Drives", "W_domain2","")
Global $U_domain2					=	IniRead(@ScriptDir & "\drives.ini","Drives", "U_domain2","")
Global $V_domain2					=	IniRead(@ScriptDir & "\drives.ini","Drives", "V_domain2","")

Global $S_domain1					=	IniRead(@ScriptDir & "\drives.ini","Drives", "S_domain1","")
Global $H_domain1					=	IniRead(@ScriptDir & "\drives.ini","Drives", "H_domain1","")
Global $X_domain1					=	IniRead(@ScriptDir & "\drives.ini","Drives", "X_domain1","")


Global $Q_MP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "Q_MP","")
Global $K_MP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "K_MP","")
Global $P_MP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "P_MP","")
Global $Y_MP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "Y_MP","")
Global $Z_MP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "Z_MP","")
Global $H_MP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "H_MP","")

Global $M_MC					=	IniRead(@ScriptDir & "\drives.ini","Drives", "M_MC","")
;~ Global $V_QPP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "V_QPP","")
;~ Global $W_QPP					=	IniRead(@ScriptDir & "\drives.ini","Drives", "W_QPP","")

$Testdomain = "www.google.de"
$Testserver = "domain.local"
$User = @UserName
$LogonServer = @LogonServer



;~ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ 										alte Dateien und Verzeichnisse löschen
;~ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

;~ HotKeySet("{ESC}", "_Terminate")

If FileExists(@ScriptDir & "\ConnectUpdate.exe") Then
	FileDelete(@ScriptDir & "\ConnectUpdate.exe")
	 _WriteLogData("ConnectUpdate.exe gelöscht")
EndIf

If FileExists(@ScriptDir & "\MappingUpdate.exe") Then
	FileDelete(@ScriptDir & "\MappingUpdate.exe")
	 _WriteLogData("MappingUpdate.exe gelöscht")
EndIf







;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							Header in die Log Dateio 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("Desktopverzeichnis: " & @DesktopCommonDir)
	_WriteLogData("----------------------------------------------------------------------------------------------------------------------")




;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							Programmstart
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

_CreateGUI()
_TrayMenue()

AdlibRegister("_CheckDrives",30000) ; alle 30 Sekunden
AdlibRegister("_VPNStatus",10000) ; alle 10 Sekunden

While 1
 ;trayIcon eingaben
		$msgtray = TrayGetMsg()
		Select
;~ 			Case $msgtray = 0
;~ 				ContinueLoop
			Case $msgtray=$traymapping
					_MapDrives()
			Case $msgtray= $trayticket
					ShellExecute("http://it-support." & @LogonDNSDomain)
			Case $msgtray= $trayausblenden
					GUISetState(@SW_HIDE,$Childform)
			Case $msgtray= $trayeinblenden
					GUISetState(@SW_SHOW,$Childform)
			Case $msgtray= $traypassword
						$Testserver = @LogonDNSDomain
						$Connection = Ping($Testserver, 5000)
							If $Connection > 0 then
								_GetUserAD()
							Else
								TrayTip("Keine verbindung zum domain1 Netzwerk!", "Bitte stellen Sie eine verbinung zum domain1 Netzwerk her.",5)
							EndIf

			Case $msgtray= $traygpupdate
					Run("gpupdate", "", @SW_HIDE)


 If WinActive ("VPN Verbindungsstatus") Then
  $nMsg = GUIGetMsg()

        Switch $nMsg

			Case $btn_mapping
					_MapDriveChildForm()
			Case $btn_ticket
				ShellExecute("http://it-support." & @LogonDNSDomain)

		EndSwitch
	EndIf

EndSelect

WEnd

;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							Formular erstellen
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func _CreateGUI()

	$aTaskbar = WinGetPos("[CLASS:Shell_TrayWnd]", "")


$Childform = GUICreate("VPN Verbindungsstatus", 384, 70, 264, 164, BitOR($WS_POPUP,$WS_THICKFRAME), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
GUISetIcon("I:\domain5Connect V3\icon3.ico", -1)
GUISetBkColor(0xFFFFFF)
$lbl_info2 = GUICtrlCreateLabel("", 8, 5, 256, 56, BitOR($SS_CENTER,$SS_SUNKEN))
GUICtrlSetFont(-1, 9, 400, 0, "Arial")
GUICtrlSetBkColor(-1, 0xD7E4F2)
$lbl_ip = GUICtrlCreateLabel("", 8, 61, 256, 20, $SS_CENTER)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$btn_mapping = GUICtrlCreateButton("btn_mapping", 272, 15, 50, 50, $BS_ICON)
GUICtrlSetImage(-1, @Scriptdir & "\Data\netzlaufwerk.ico", -1)
GUICtrlSetTip(-1, "Netzlaufwerke neu verbinden")
$btn_ticket = GUICtrlCreateButton("btn_ticket", 328, 15, 50, 50, $BS_ICON)
GUICtrlSetImage(-1, @Scriptdir & "\Data\help.ico", -1)
GUICtrlSetTip(-1, "Ticketsystem")
;~ GUICtrlSetData($lbl_ip, "IP Adresse: " & @IPAddress2)

			$aWin = WinGetPos($Childform)
			WinMove($Childform, "", @DesktopWidth - $aWin[2] , @DesktopHeight - $aWin[3] - $aTaskbar[3])
GUISetState(@SW_HIDE)
EndFunc
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							Tray Menü
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _TrayMenue()

	Opt("TrayMenuMode", 3) ; Default tray menu items (Script Paused/Exit) will not be shown.
		TraySetIcon(@ScriptDir& "\Data\blue.ico")

		Local $settingsitem = TrayCreateMenu("Verbindunsstatusfenster")
		$trayeinblenden		= TrayCreateItem("einblenden", $settingsitem)
		$trayausblenden		= TrayCreateItem("ausblenden", $settingsitem)

			TrayCreateItem("")
			TrayCreateItem("")
		$traypassword = TrayCreateItem("Passwort Gültigkeit")
			TrayCreateItem("")
			TrayCreateItem("")
		$traymapping = TrayCreateItem("Laufwerke verbinden")
			TrayCreateItem("")
		$trayticket = TrayCreateItem("Ticketsystem")
			TrayCreateItem("")
			TrayCreateItem("")
			TrayCreateItem("")
		$traygpupdate = TrayCreateItem("gpupdate")

;~ 		$traytrennen = TrayCreateItem("Trennen")
;~ 			_WriteLogData("Tray Menü erstellt.")


EndFunc




;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							VPN_Check
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func _VPNCheck()

	$Testserver = @LogonDNSDomain

        $PingOnServer1 = Ping($Testserver, 1000)

Return $PingOnServer1


$PingOnServer1=""
$Testserver=""
EndFunc

;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							Internetverbindung prüfen
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------





;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							VPN Verbindungsstatus
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _VPNStatus()
	local 	$Testserver = @LogonDNSDomain
			$Connection = Ping($Testserver, 5000)

       If $Connection <= 0 Then
            GUICtrlSetBkColor($lbl_info2, @CRLF & 0x66FF00)
            GUICtrlSetData($lbl_info2, @CRLF &  "Keine Verbindung zu domain1")
			TraySetIcon(@ScriptDir& "\Data\blue.ico")
			TraySetToolTip("Keine Verbidnung zu domain1." & @CRLF & "Bauen Sie die die Verbindung bitte mit dem Palo Alto Client her.")
			EndIf
				If $Connection > 0 Then
						If $Connection > 350 Then

								GUICtrlSetData($lbl_info2, @CRLF & "Achtung!" & @CRLF & "Sehr langsame Verbindung!" )
								GUICtrlSetBkColor($lbl_info2, @CRLF & 0xFF0000)
								TraySetIcon(@ScriptDir& "\Data\red.ico")
								TraySetToolTip("Achtung!" & @CRLF & "Sehr langsame Verbindung!" & @CRLF & "Arbeit nur unter Schwierigkeiten möglich!")
								_WriteLogData("UMTS Geschwindingkeitswarnung. Antwortzeit: " & $Connection)

						ElseIf $Connection > 200 Then
								GUICtrlSetBkColor($lbl_info2, @CRLF & 0xFFFF00)
								GUICtrlSetData($lbl_info2, @CRLF & "Verbindungsgeschwindigkeit:" & @CRLF &  "gut")
								TraySetIcon(@ScriptDir& "\Data\yellow.ico")
								TraySetToolTip("VPN Verbindung zu domain1 hergestellt." & @CRLF & "Die Verbindungsgeschwindigkeit ist:" & @CRLF &  "gut")

						ElseIf $Connection < 200 Then
								GUICtrlSetBkColor($lbl_info2, @CRLF & 0x66FF00)
								GUICtrlSetData($lbl_info2, @CRLF &  "Verbindungsgeschwindigkeit:" & @CRLF &  "Sehr gut")
								TraySetIcon(@ScriptDir& "\Data\green.ico")
								TraySetToolTip("VPN Verbindung zu domain1 hergestellt." & @CRLF & "Die Verbindungsgeschwindigkeit ist:" & @CRLF &  "Sehr gut")

				EndIf

	EndIf

$Connection=""
$netlogon=""
$Testserver=""
EndFunc   ;==>_VPNStatus









;;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ ;							Laufwerke Verbinden aus Childform(Funktionsaufruf)
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _MapDriveChildForm()

 If WinActive ("VPN Verbindungsstatus") Then

	GUICtrlSetData($lbl_info2, @CRLF & "Netzlaufwerke werden verbunden.")
	GUICtrlSetBkColor($lbl_info2,0xD7E4F2)
	GUICtrlSetState($btn_mapping,$GUI_DISABLE)
			_WriteLogData("Starte Maping aus ChildForm/Tray")
	_MapDrives()

	GUICtrlSetState($btn_mapping,$GUI_ENABLE)
	GUICtrlSetData($lbl_info2, @CRLF &"Netzlaufwerke wurden neu verbunden." )

	Sleep(1500)
			_WriteLogData("Ende Mapping aus Childform/Tray")
 EndIf
EndFunc   ;==>_MapDrive




;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							AD benutzerdaten abfragen
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Func _GetUserAD()

;~ Benutzeraten aus Abfragen, wichtig für "Passwort läuft ab" Anzeigen
Global $UserAccountControl, $samAccountName,$FirstName, $LastName, $title, $PasswordLastChanged, $IsAccountLocked, $DaysLeft,$msg,$icon	,$AnzeigeDatPwdExpires, $Counter
Local $Found = 0
$AnmeldeUser = @UserName

$LogonServer = @LogonDomain

$serverName = $LogonServer
$baseStr = "DC="& @LogonDomain&",DC=local"

$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_info2, @CRLF  & "Ein Moment bitte," & @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)



		If  $DaysLeft <= 10 Then

			Switch $DaysLeft
				Case 1
					GUICtrlSetBkColor($lbl_info2, 0xf20000)
							MsgBox (16, "Achtung","Ihr Passwort läuft heute ab" & @CRLF & @CRLF & "Bitte ändern Sie das Passwort umgehend!")
				Case 2
					GUICtrlSetBkColor($lbl_info2, 0xFF9900)
							MsgBox (48, "Achtung","Ihr Passwort läuft morgen ab" & @CRLF & @CRLF & "Bitte ändern Sie das Passwort!")
				Case Else
					GUICtrlSetBkColor($lbl_info2, 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_info2, 0xD7E4F2)
		EndIf
	EndIf
    $objectList.MoveNext()
	$Counter += 1


Wend


			If $DaysLeft > 10 Then
					If WinActive ("VPN Verbindungsstatus") Then
						GUICtrlSetBkColor($lbl_info2, 0xDAF2D7)
						GUICtrlSetData($lbl_info2, @CRLF   & "Information!"&  @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)
					Else
						TrayTip("Information!", "Ihr Passwort ist noch " & $DaysLeft &" Tage gültig, es läuft am " & $AnzeigeDatPwdExpires & " ab. Es ist nicht erforderlich das Passwort zu ändern.",5)
					EndIf
			EndIf
				GUICtrlSetData($lbl_info2, @CRLF   &"Suche nach Benutzerdaten abgeschlossen.")
				Sleep(500)
				GUICtrlSetBkColor($lbl_info2, 0xD7E4F2)
				GUICtrlSetData($lbl_info2, @CRLF   &"Verbindung der Netzlaufwerke wird vorbereitet.")
				Sleep(500)
					$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 Ablufdatum emittelt")

$AnzeigeDatPwdChanged=""
$Day2Change=""
$Date2Change=""
$HeuteJMT=""
$ChangedDate=""
$DatChangedJMT=""

EndFunc







;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							Laufwerke Verbinden (Funktionsaufruf)
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func _MapDrive()
$Testserver = @LogonDNSDomain
$Ping = Ping($Testserver,1000)

		If $Ping > 0 Then

				_WriteLogData("Starte Mapping")

			_MapDrives()

				_WriteLogData("Mapping ende")
		EndIf
EndFunc   ;==>_MapDrive


;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;							laufwerke verbinden
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _MapDrives()



	_AD_Open()
	$aUser = _AD_GetUserGroups(@UserName)

	If WinActive ("VPN Verbindungsstatus") Then
		Else
			TrayTip("Ihre Netzlaufwerke werden verbunden", "Bitte gedulden Sie sich einen Moment.",1)
			GUICtrlSetData($lbl_info2, @CRLF &"Ihre Netzlaufwerke werden verbunden," &  @CRLF & "Bitte gedulden Sie sich einen Moment.")
			Sleep(250)
		EndIf
	;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	;~																										domain1
	;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

	If @LogonDNSDomain = "domain.local" Then

			_ArraySearch($aUser, "GRP_Abteilung_IT" , 0, 0, 0, 1)
			If Not @error Then

				$Laufwerk ="H:"
				$Drive = $H_domain1  & @UserName
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "S:"
				$Drive = $S_domain1
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk ="X:"
				$Drive = $X_domain1
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

			EndIf

	EndIf


	If @LogonDNSDomain = "domain5.local" Then


			_ArraySearch($aUser, "Mitarbeiter_CPP" , 0, 0, 0, 1)
			If Not @error Then

				$Laufwerk = "G:"
				$Drive = $G_CPP
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk ="H:"
				$Drive = $H_CPP & @UserName
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""
			EndIf

				_ArraySearch($aUser, "GRP_IT-Abteilung" , 0, 0, 0, 1)
	If Not @error Then

				$Laufwerk = "S:"
				$Drive = $S_domain1
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk ="X:"
				$Drive = $X_domain1
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""
EndIf
				_ArraySearch($aUser, "CN=G-Betriebsrat" , 0, 0, 0, 1)
	If Not @error Then

				$Laufwerk = "O:"
				$Drive = $O_Betriebsrat
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""
EndIf
				_ArraySearch($aUser, "CN=G-Buchhaltung" , 0, 0, 0, 1)
	If Not @error Then

				$Laufwerk = "L:"
				$Drive = $L_Buchhaltung
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "M:"
				$Drive = $M_Buchhaltung
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""
			EndIf
	EndIf




	If @LogonDNSDomain = "domain2.local" Then

		$_domain2_Alle= _ArraySearch($aUser, "CN=Alle" , 0, 0, 0, 1)
		$QPP= _ArraySearch($aUser, "CN=AbteilungQPP" , 0, 0, 0, 1)

		If $domain2_Alle  <> @error Then
		If $QPP <> @error Then

					$Laufwerk = "V:"
					$Drive = $V_domain2
						_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "W:"
					$Drive = $W_domain2
						_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

		else

					$Laufwerk = "R:"
					$Drive = $R_domain2
						_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "S:"
					$Drive = $S_domain2
						_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "T:"
					$Drive = $T_domain2
						_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "U:"
					$Drive = $U_domain2
						_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""


		EndIf
		EndIf

	EndIf


	If @LogonDNSDomain = "domain3.local" Then

		_ArraySearch($aUser, "CN=Alle" , 0, 0, 0, 1)
			If Not @error Then
				$Laufwerk = "H:"
				$Drive = $H_MP
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "Q:"
				$Drive = $Q_MP
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "P:"
				$Drive = $P_MP
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "Y:"
				$Drive = $Y_MP
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "Z:"
				$Drive = $Z_MP
					_Laufwerk_verbinden($Laufwerk, $Drive)
						$Laufwerk = ""
						$Drive = ""
			EndIf
	EndIf


	_AD_Close()



EndFunc



;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



Func _CheckDrives()
$Testserver = @LogonDNSDomain
$Ping = Ping($Testserver,1000)

	If $Ping > 0 Then

			_AD_Open()
				$aUser = _AD_GetUserGroups(@UserName)


		If @LogonDNSDomain = "domain.local" Then

				_ArraySearch($aUser, "GRP_Abteilung_IT" , 0, 0, 0, 1)
				If Not @error Then

					$Laufwerk ="H:"
					$Drive = $H_domain1  & @UserName
						_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""

					$Laufwerk = "S:"
					$Drive = $S_domain1
					$Status=DriveStatus($Laufwerk)
						_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""

					$Laufwerk ="X:"
					$Drive = $X_domain1
					$Status=DriveStatus($Laufwerk)
						_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""

				EndIf

		EndIf

			If @LogonDNSDomain = "domain5.local" Then


						_ArraySearch($aUser, "Mitarbeiter_CPP" , 0, 0, 0, 1)
						If Not @error Then

								$Laufwerk = "G:"
								$Drive = $G_CPP
									_DriveCheckState($Laufwerk, $Drive)

								$Laufwerk ="H:"
								$Drive = $H_CPP
									_DriveCheckState($Laufwerk, $Drive)

						EndIf

								_ArraySearch($aUser, "GRP_IT-Abteilung" , 0, 0, 0, 1)
						If Not @error Then
								$Laufwerk = "S:"
								$Drive = $S_domain1
									_DriveCheckState($Laufwerk, $Drive)

								$Laufwerk ="X:"
								$Drive = $X_domain1
									_DriveCheckState($Laufwerk, $Drive)

						EndIf
								_ArraySearch($aUser, "CN=G-Betriebsrat" , 0, 0, 0, 1)
						If Not @error Then
								$Laufwerk = "O:"
								$Drive = $O_Betriebsrat
									_DriveCheckState($Laufwerk, $Drive)

						EndIf
								_ArraySearch($aUser, "CN=G-Buchhaltung" , 0, 0, 0, 1)
						If Not @error Then
								$Laufwerk = "L:"
								$Drive = $L_Buchhaltung
									_DriveCheckState($Laufwerk, $Drive)

								$Laufwerk = "M:"
								$Drive = $M_Buchhaltung
									_DriveCheckState($Laufwerk, $Drive)
						EndIf
				EndIf




				If @LogonDNSDomain = "domain2.local" Then

					_ArraySearch($aUser, "CN=Alle" , 0, 0, 0, 1)


					$_domain2_Alle= _ArraySearch($aUser, "CN=Alle" , 0, 0, 0, 1)
					$QPP= _ArraySearch($aUser, "CN=AbteilungQPP" , 0, 0, 0, 1)

					If $domain2_Alle  >=0 Then
					If $QPP >=0 Then
									$Laufwerk = "V:"
									$Drive = $V_domain2
										_DriveCheckState($Laufwerk, $Drive)
									$Laufwerk = ""
									$Drive = ""

									$Laufwerk = "W:"
									$Drive = $W_domain2
										_DriveCheckState($Laufwerk, $Drive)
									$Laufwerk = ""
									$Drive = ""
					else

									$Laufwerk = "R:"
									$Drive = $R_domain2
										_DriveCheckState($Laufwerk, $Drive)
									$Laufwerk = ""
									$Drive = ""

									$Laufwerk = "S:"
									$Drive = $S_domain2
										_DriveCheckState($Laufwerk, $Drive)
									$Laufwerk = ""
									$Drive = ""

									$Laufwerk = "T:"
									$Drive = $T_domain2
										_DriveCheckState($Laufwerk, $Drive)
									$Laufwerk = ""
									$Drive = ""

									$Laufwerk = "U:"
									$Drive = $U_domain2
										_DriveCheckState($Laufwerk, $Drive)
									$Laufwerk = ""
									$Drive = ""


					EndIf
					EndIf
				EndIf



				If @LogonDNSDomain = "domain3.local" Then

					_ArraySearch($aUser, "CN=Alle" , 0, 0, 0, 1)
						If Not @error Then

							$Laufwerk = "H:"
							$Drive = $H_MP
								_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""

							$Laufwerk = "Q:"
							$Drive = $Q_MP
								_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""

							$Laufwerk = "P:"
							$Drive = $P_MP
								_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""

							$Laufwerk = "Y:"
							$Drive = $Y_MP
								_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""

							$Laufwerk = "Z:"
							$Drive = $Z_MP
								_DriveCheckState($Laufwerk, $Drive)
							$Laufwerk = ""
							$Drive = ""
						EndIf
				EndIf


	_AD_Close()

ElseIf $Ping = 0 Then
	Sleep(1000)
	$Ping2 = Ping($Testserver,5000)
	 If $Ping2 = 0 Then
		_unmappDrives()
	EndIf
EndIf
EndFunc


;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func _Laufwerk_verbinden($Laufwerk, $Drive)

	$count =0
			Do
				DriveMapDel($Laufwerk)
						_WriteLogData("Laufwerk " & $Laufwerk & " getrennt.")

				DriveMapAdd($Laufwerk, $Drive)

					If WinActive ("VPN Verbindungsstatus") Then
						GUICtrlSetData($lbl_info2, @CRLF & "Netzlaufwerke werden verbunden," & @CRLF &  "Laufwerk " & $Laufwerk & " wird verbunden.")
					Else
						TrayTip("Netzlaufwerke werden verbunden" , "Laufwerk " & $Laufwerk & " wird verbunden.",1)
							Sleep(250)
								_WriteLogData("Laufwerk " & $Laufwerk &" wird verbunden.")

					EndIf

						Sleep(1000)

					If  @error Then
							$Error = @error
					EndIf

					$State = DriveStatus($Laufwerk)

						If $State = "INVALID" Then
							$count +=1
								_ErrorLog($Error, $Laufwerk)
								_WriteLogData("Laufwerk " & $Laufwerk & " nicht verbunden. Fehlversuch:" & $count)
						Else
								ExitLoop
						EndIf

				Until $count >= 3
						If $count >=3 Then
							_ErrorLog($Error, $Laufwerk)
								MsgBox(48,"Netzlaufwerkverbindung fehlgeschlagen", "Laufwerk: " & $Laufwerk & " konnte nicht verbunden werden." & @CR & _
																					"Bitte wenden Sie sich an den IT Support.")
						EndIf

			If WinActive ("VPN Verbindungsstatus") Then
				GUICtrlSetData($lbl_info2, @CRLF &@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk " & $Laufwerk & " erfolgreich verbunden.")
					Sleep(250)
					_WriteLogData("Laufwerk " & $Laufwerk & " verbunden.")
				Else
					TrayTip("Netzlaufwerke werden verbunden", "Laufwerk " & $Laufwerk & " verbunden.",1)
					Sleep(250)
					_WriteLogData("Laufwerk " & $Laufwerk & " aus Childform verbunden.")
			EndIf

								$Error = ""
								$Laufwerk = ""
								$aUser= ""
								$State = ""
								$Drive = ""


		Sleep(500)
EndFunc



;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




Func _DriveCheckState($Laufwerk, $Drive)

		$Status=DriveStatus($Laufwerk)


			If $Status = "INVALID" Then

				_WriteLogData("Laufwerk " & $Laufwerk &" wurde getrennt, wird neu verbunden.")

					$count =0

				Do

				DriveMapAdd($Laufwerk, $Drive)
					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 = ""

								If WinActive ("VPN Verbindungsstatus") Then
										GUICtrlSetData($lbl_info2, @CRLF &@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF &"Laufwerk " & $Laufwerk & " erfolgreich verbunden.")
										Sleep(250)
										_WriteLogData("Laufwerk " & $Laufwerk &"  verbunden.")
									Else
;~ 										TrayTip("Netzlaufwerke werden verbunden","Laufwerk " & $Laufwerk & " erfolgreich verbunden.",1) ;das lassen wir beim Status check sonst kommen popups
								EndIf


							EndIf

			EndIf
			$Status = ""
			$Laufwerk = ""
			$count= 0
			$Drive=""

	EndFunc

;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Func _unmappDrives()


	_AD_Open()
	$aUser = _AD_GetUserGroups(@UserName)


	;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	;~																										domain1
	;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

	If @LogonDNSDomain = "domain.local" Then

;~ 			_ArraySearch($aUser, "GRP_Abteilung_IT" , 0, 0, 0, 1)
			If Not @error Then

				$Laufwerk ="H:"
				$Drive = $H_domain1  & @UserName
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "S:"
				$Drive = $S_domain1
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk ="X:"
				$Drive = $X_domain1
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

			EndIf

	EndIf


	If @LogonDNSDomain = "domain5.local" Then


;~ 			_ArraySearch($aUser, "Mitarbeiter_CPP" , 0, 0, 0, 1)
			If Not @error Then

				$Laufwerk = "G:"
				$Drive = $G_CPP
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk ="H:"
				$Drive = $H_CPP & @UserName
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""


;~ 				_ArraySearch($aUser, "GRP_IT-Abteilung" , 0, 0, 0, 1)

				$Laufwerk = "S:"
				$Drive = $S_domain1
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk ="X:"
				$Drive = $X_domain1
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

;~ 				_ArraySearch($aUser, "CN=G-Betriebsrat" , 0, 0, 0, 1)

				$Laufwerk = "O:"
				$Drive = $O_Betriebsrat
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

;~ 				_ArraySearch($aUser, "CN=G-Buchhaltung" , 0, 0, 0, 1)

				$Laufwerk = "L:"
				$Drive = $L_Buchhaltung
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "M:"
				$Drive = $M_Buchhaltung
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""
			EndIf
	EndIf




	If @LogonDNSDomain = "domain2.local" Then

		$_domain2_Alle= _ArraySearch($aUser, "CN=Alle" , 0, 0, 0, 1)
		$QPP= _ArraySearch($aUser, "CN=AbteilungQPP" , 0, 0, 0, 1)

		If $domain2_Alle  <> @error Then
		If $QPP <> @error Then

					$Laufwerk = "V:"
					$Drive = $V_domain2
						_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "W:"
					$Drive = $W_domain2
						_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

		else

					$Laufwerk = "R:"
					$Drive = $R_domain2
						_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "S:"
					$Drive = $S_domain2
						_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "T:"
					$Drive = $T_domain2
						_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

					$Laufwerk = "U:"
					$Drive = $U_domain2
						_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""


		EndIf
		EndIf

	EndIf


	If @LogonDNSDomain = "domain3.local" Then

		_ArraySearch($aUser, "CN=Alle" , 0, 0, 0, 1)
			If Not @error Then
				$Laufwerk = "H:"
				$Drive = $H_MP
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "Q:"
				$Drive = $Q_MP
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "P:"
				$Drive = $P_MP
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "Y:"
				$Drive = $Y_MP
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""

				$Laufwerk = "Z:"
				$Drive = $Z_MP
					_Laufwerk_trennen($Laufwerk)
						$Laufwerk = ""
						$Drive = ""
			EndIf
	EndIf



_AD_Close
EndFunc

;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func _Laufwerk_trennen($Laufwerk)

		$Status=DriveStatus($Laufwerk)


			If $Status <> "INVALID" Then
;~ 				MsgBox(0,"",$Status)
							If WinActive ("VPN Verbindungsstatus") Then
										GUICtrlSetData($lbl_info2, @CRLF &"Verbindung beendet" &  @CRLF & "Ihre Netzlaufwerke werden getrennt")
										Sleep(250)
							Else
								TrayTip("Verbindung beendet","Ihre Netzlaufwerke werden getrennt",1)
							EndIf
				DriveMapDel($Laufwerk)
						_WriteLogData("Laufwerk " & $Laufwerk & " getrennt.")


					EndIf

						Sleep(500)



								$Error = ""
								$Laufwerk = ""
								$aUser= ""
								$State = ""
								$Drive = ""


		Sleep(500)
EndFunc



;~ #################################################################################################################################################################################################################
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ #################################################################################################################################################################################################################


Func _ErrorLog($iError, $iLaufwerk)


	If $iError = 1 Then
			_WriteLogData("Netzlaufwerk "& $iLaufwerk &" nicht verbunden - Undefinierter / anderer Fehler. @extended enthält den Rückgabewert der Windows API.")
	ElseIf  $iError = 2 Then
			_WriteLogData("Netzlaufwerk "& $iLaufwerk &" nicht verbunden  - Der Zugriff auf die Remote-Freigabe wurde verweigert")
	ElseIf  $iError = 3 Then
			_WriteLogData("Netzlaufwerk "& $iLaufwerk &" nicht verbunden  - Das Gerät ist bereits zugewiesen")
	ElseIf  $iError = 4 Then
			_WriteLogData("Netzlaufwerk "& $iLaufwerk &" nicht verbunden  - Ungültiger Gerätename")
	ElseIf  $iError = 5 Then
			_WriteLogData("Netzlaufwerk "& $iLaufwerk &" nicht verbunden  - Ungültige Remote-Freigabe")
	ElseIf  $iError = 6 Then
			_WriteLogData("Netzlaufwerk "& $iLaufwerk &" nicht verbunden  - Ungültiges Passwort")
	EndIf

EndFunc

;~ #################################################################################################################################################################################################################
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;~ #################################################################################################################################################################################################################





