#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_UseX64=n

#include <Constants.au3>
Opt("MustDeclareVars", 1)

ConsoleWrite(Get_Schtasks() & @CRLF)

; #FUNCTION# =============================================================================
; Name..............:		Get_Schtasks
; Description ....:		Enumerates NOT from windows created scheduled tasks from a (remote) system
; Syntax............:		Get_Schtasks($system = "localhost", $delimiter = "|"))
; Parameters ....:		$system - enter the hostname or ip address where to enumerate the scheduled tasks
;								$delimter - delmiter for each header, standard is '|'
;								$header - returns also a header
;								Header: HostName|TaskName|Next Run Time|Status|Logon Mode|Last Run Time|Last Result|Author|Task To Run|Start In|Comment|Scheduled Task State|Idle Time|Power Management|Run As User|Delete Task If Not Rescheduled|Stop Task If Runs X Hours and X Mins|Schedule|Schedule Type|Start Time|Start Date|End Date|Days|Months|Repeat: Every|Repeat: Until: Time|Repeat: Until: Duration|Repeat: Stop If Still Running
; Return Value.:		String with scheduled tasks
; Author...........:		UEZ
; Version .........:		v0.90 build 2010-12-30 Beta
; =========================================================================================
Func Get_Schtasks($system = "localhost", $delimiter = "|", $header = False)
	If $system = "localhost" Then $system = @ComputerName
	Local $run = Run(@ComSpec & " /c schtasks.exe /s " & $system & " /query /fo csv /v", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
	Local $c, $l, $arr, $aChk, $test, $ext, $output, $s
	While 1
		$l &= StdoutRead($run)
		If @error Then ExitLoop
	WEnd
;~ 	If $header Then $output = '"Hostname"' & $delimiter & '"Aufgabenname"' & $delimiter & '"Nächste Ausführungszeit"' & $delimiter & '"Status"' & $delimiter & '"Anmeldemodus"' & $delimiter & '"Letzte Laufzeit"' & $delimiter & '"Letztes Ergebnis"' & $delimiter & '"Autor"' & $delimiter & '"Auszufhrende Aufgabe"' & $delimiter & '"Starten in"' & $delimiter & '"Kommentar"' & $delimiter & '"Status der geplanten Aufgabe"' & $delimiter & '"Leerlaufzeit"' & $delimiter & '"Energieverwaltung"' & $delimiter & '"Als Benutzer ausführen"' & $delimiter & '"Aufgab lö”schen, falls nicht verlegt"' & $delimiter & '"Aufgabe beenden, falls sie X St. und X Min. ausgeführt wird"' & $delimiter & '"Zeitplan"' & $delimiter & '"Zeitplantyp"' & $delimiter & '"Startzeit"' & $delimiter & '"Startdatum"' & $delimiter & '"Enddatum"' & $delimiter & '"Tage"' & $delimiter & '"Monate"' & $delimiter & '"Wiederholung: Jede(n)"' & $delimiter & '"Wiederholung: Bis: Zeit"' & $delimiter & '"Wiederholung: Bis: Dauer"' & $delimiter & '"Wiederholung: Beenden, falls immer noch ausgeführt"'& @CRLF
	If $header Then $output = '"HostName"' & $delimiter & '"TaskName"' & $delimiter & '"Next Run Time"' & $delimiter & '"Status"' & $delimiter & '"Logon Mode"' & $delimiter & '"Last Run Time"' & $delimiter & '"Last Result"' & $delimiter & '"Author"' & $delimiter & '"Task To Run"' & $delimiter & '"Start In"' & $delimiter & '"Comment"' & $delimiter & '"Scheduled Task State"' & $delimiter & '"Idle Time"' & $delimiter & '"Power Management"' & $delimiter & '"Run As User"' & $delimiter & '"Delete Task If Not Rescheduled"' & $delimiter & '"Stop Task If Runs X Hours and X Mins"' & $delimiter & '"Schedule"' & $delimiter & '"Schedule Type"' & $delimiter & '"Start Time"' & $delimiter & '"Start Date"' & $delimiter & '"End Date"' & $delimiter & '"Days"' & $delimiter & '"Months"' & $delimiter & '"Repeat: Every"' & $delimiter & '"Repeat: Until: Time"' & $delimiter & '"Repeat: Until: Duration"' & $delimiter & '"Repeat: Stop If Still Running"' & @CRLF
	$arr = StringSplit($l, Chr(10))
	For $c = 1 To $arr[0] - 1
		$aChk = StringSplit($arr[$c], ",")
		If $aChk[0] < 2 Then ContinueLoop
		If  $aChk[1] <> '"Hostname"' And $aChk[2] <> '"Taskname"'  Then
			If StringLeft($aChk[2], 2) = '"\'  Then
				$s = 3
				$test = StringReplace(StringMid($aChk[2], $s), "\", "\")
			Else
				$s = 1
				$test = StringReplace(StringMid($aChk[2], $s), "\", "\")
			EndIf
			$ext = @extended
			If $aChk[0] > 0 And $ext = 0 Then
				$arr[$c] = StringReplace($arr[$c], $aChk[2], '"'& StringMid($aChk[2], $s))
				$output &= StringReplace($arr[$c], '","', '"' & $delimiter & '"')
			EndIf
		EndIf
	Next
	Return SetError(0, 0, $output)
EndFunc