AT-Befehl - schtasks

  • Möchte mit Autoit ein Programm zu einem bestimmten Zeitpunkt starten (wie mit AT).
    Wie kann ich dies realisieren?

    Gruss Hans-Jürgen ^^

    Einmal editiert, zuletzt von emeuv (17. April 2009 um 08:51)

  • Vielleicht so... LINK

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Die Version mit WMI ist auch nicht zu verachten. Bin noch am testen...

    Spoiler anzeigen
    [autoit]

    Global $wbemFlagReturnImmediately = 0x10
    Global $wbemFlagForwardOnly = 0x20

    [/autoit] [autoit][/autoit] [autoit]

    Func _TaskAddScheduleWMI($hProgram, $sTime, $sDay = '********', $strComputer = "localhost", $iOccurrence = False, $sDaysofweek = '', $sDaysOfMonth = '', $bInteractive = False)
    Local $iJobID, $sMsg, $iBais

    If $sDay = '' Or $sDay = -1 Or $sDay = Default Then $sDay = '********'
    If $strComputer = '' Or $strComputer = -1 Or $strComputer = Default Then $strComputer = 'localhost'
    $iBais = $sDay & $sTime & '.000000' & "-" & _TimeZoneGetBiasWMI($strComputer)
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $objNewJob = $objWMIService.Get("Win32_ScheduledJob")
    ; msgbox(0,"",$hProgram & ', ' & $iBais & ', ' & $iOccurrence & ', ' & $sDaysofweek & ', ' & $sDaysOfMonth & ', ' & $bInteractive & @CRLF)
    $iReturnCode = $objNewJob.Create($hProgram, $iBais, True, $sDaysofweek, $sDaysOfMonth, $bInteractive, $iJobID)

    If $iReturnCode = 0 Then
    Return (SetError(0, $iReturnCode, $iJobID))
    Else
    $sMsg = _TaskScheduleGetReturnValue($iReturnCode)
    Return (SetError(1, $iReturnCode, $sMsg))
    EndIf
    EndFunc ;==>_TaskAddScheduleWMI

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION#;===============================================================================
    ;
    ; Name...........: _TaskGetScheduledWMI
    ; Description ...: Returns an array of scheduled tasks.
    ; Syntax.........: _TaskGetScheduledWMI()
    ; Parameters ....:
    ; Return values .: Success - Returns the list of scheduled tasks.
    ; Failure - Sets @Error:
    ; |1 - No WMI Objects Found
    ; Author ........: Danny35d
    ; Modified.......:
    ; Remarks .......:
    ; Related .......: _TaskAddScheduleWMI(), _TaskDelScheduleWMI()
    ; Link ..........;
    ; Example .......; Yes
    ;
    ;;==========================================================================================
    Func _TaskGetScheduledWMI($strComputer = 'localhost')
    Local $iCount = 1
    Dim $Output[1][20]

    If $strComputer = '' Or $strComputer = -1 Or $strComputer = Default Then $strComputer = 'localhost'
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ScheduledJob", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) Then
    For $objItem In $colItems
    ReDim $Output[UBound($Output) + 1][20]
    $Output[$iCount][1] = $objItem.Caption
    $Output[$iCount][2] = $objItem.Command
    $Output[$iCount][3] = _GetDaysOfMonth($objItem.DaysOfMonth)
    $Output[$iCount][4] = _GetDaysOfWeek($objItem.DaysOfWeek)
    $Output[$iCount][5] = $objItem.Description
    $Output[$iCount][6] = WMIDateStringToDate($objItem.ElapsedTime)
    $Output[$iCount][7] = WMIDateStringToDate($objItem.InstallDate)
    $Output[$iCount][8] = _GetBoolean($objItem.InteractWithDesktop)
    $Output[$iCount][9] = $objItem.JobId
    $Output[$iCount][10] = $objItem.JobStatus
    $Output[$iCount][11] = $objItem.Name
    $Output[$iCount][12] = $objItem.Notify
    $Output[$iCount][13] = $objItem.Owner
    $Output[$iCount][14] = $objItem.Priority
    $Output[$iCount][15] = _GetBoolean($objItem.RunRepeatedly)
    $Output[$iCount][16] = WMIDateStringToDate($objItem.StartTime)
    $Output[$iCount][17] = $objItem.Status
    $Output[$iCount][18] = WMIDateStringToDate($objItem.TimeSubmitted)
    $Output[$iCount][19] = WMIDateStringToDate($objItem.UntilTime)
    $iCount += 1
    Next
    If UBound($Output) - 1 Then
    $Output[0][0] = UBound($Output) - 1
    Else
    $Output = ''
    EndIf
    Else
    Return (SetError(1, 1, 'No WMI Objects Found for class: Win32_ScheduledJob'))
    EndIf
    Return ($Output)
    EndFunc ;==>_TaskGetScheduledWMI

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION#;===============================================================================
    ;
    ; Name...........: _TaskDelScheduleWMI
    ; Description ...: Deletes a scheduled task or all schedule task.
    ; Syntax.........: _TaskDelScheduleWMI($strComputer = 'localhost', $iJobID = -1, $iDelAll = False)
    ; Parameters ....: $sName - The name of the computer to execute the deletion on.
    ; $iID - [Optional] The id of the task to delete. If blank will delete the first scheduled task.
    ; $iDelete - [Optional] Integer value to determine deletion type. If 0 will delete all tasks, 1 will delete on the specified task.
    ; Return values .: Success - Deletes the specified task.
    ; Failure - Sets @Error:
    ; |1 -
    ; Author ........: Danny35d
    ; Modified.......:
    ; Remarks .......:
    ; Related .......: _TaskAddScheduleWMI(), _TaskGetSchedule()
    ; Link ..........;
    ; Example .......; Yes
    ;
    ;;==========================================================================================
    Func _TaskDelScheduleWMI($strComputer = 'localhost', $iJobID = -1, $iDelAll = False)
    Local $iReturnCode, $iError = 1, $sMsg, $iFoundID = False

    If $iJobID = '' Or $iJobID = Default Then $iJobID = -1
    If $strComputer = '' Or $strComputer = -1 Or $strComputer = Default Then $strComputer = 'localhost'
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ScheduledJob", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) Then
    For $objItem In $colItems
    $intJobID = $objItem.JobId
    If $iJobID = $intJobID Or $iDelAll Then
    $iFoundID = True
    $objInstance = $objWMIService.Get('Win32_ScheduledJob.JobID=' & $intJobID)
    $iReturnCode = $objInstance.Delete
    EndIf
    Next
    Else
    Return (SetError(1, 3, 'No WMI Objects Found for class: Win32_ScheduledJob'))
    EndIf

    If Not $iFoundID Then $iReturnCode = 4
    If $iReturnCode = 0 Then $iError = 0
    $sMsg = _TaskScheduleGetReturnValue($iReturnCode)

    Return (SetError($iError, $iReturnCode, $sMsg))
    EndFunc ;==>_TaskDelScheduleWMI

    [/autoit] [autoit][/autoit] [autoit]

    Func WMIDateStringToDate($dtmDate)
    If $dtmDate = '' Then
    Return ($dtmDate)
    Else
    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
    EndIf
    EndFunc ;==>WMIDateStringToDate

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION#;===============================================================================
    ;
    ; Name...........: _TimeZoneGetBiasWMI
    ; Description ...: Returns current bias for local time translation. formula: UTC = local time - bias.
    ; Syntax.........: _TimeZoneGetBiasWMI() or _TimeZoneGetBiasWMI('RemoteComputerName')
    ; Parameters ....:
    ; Return values .: Success - Returns Bias time.
    ; Failure - Sets @Error:
    ; |1 - Command Failed
    ; Author ........: Danny35d
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......; Yes
    ;
    ;;==========================================================================================
    Func _TimeZoneGetBiasWMI($strComputer = 'localhost')
    Local $iBais, $iDayLightBais

    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_TimeZone", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) Then
    For $objItem In $colItems
    $iBais = $objItem.Bias
    $iDayLightBais = $objItem.DaylightBias
    Next
    Else
    Return (SetError(1, 'No WMI Objects Found for class: Win32_TimeZone', ''))
    EndIf

    Return (Execute($iBais & ' - ' & $iDayLightBais))
    EndFunc ;==>_TimeZoneGetBiasWMI

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetBoolean($iBoolean)
    If Not $iBoolean Then
    Return (False)
    Else
    Return (True)
    EndIf
    EndFunc ;==>_GetBoolean

    [/autoit] [autoit][/autoit] [autoit]

    Func _TaskScheduleGetReturnValue($iReturnCode)
    Local $sMsg

    Switch $iReturnCode
    Case 0
    $sMsg = 'The request was accepted.'
    Case 1
    $sMsg = 'The request is not supported.'
    Case 2
    $sMsg = 'The user did not have the necessary access.'
    Case 4
    $sMsg = 'Job ID not found.'
    Case 8
    $sMsg = 'Interactive process.'
    Case 9
    $sMsg = 'The directory path to the service executable file was not found.'
    Case 21
    $sMsg = 'Invalid parameters have been passed to the service.'
    Case 22
    $sMsg = 'The account which this service is to run under is either invalid or lacks the permissions to run the service.'
    EndSwitch
    Return ($sMsg)
    EndFunc ;==>_TaskScheduleGetReturnValue

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetDaysOfMonth($iDaysOfMonth)
    Local $sDaysOfMonth
    Local $aDaysOfMonth = _GetPower2(31)

    For $x = $aDaysOfMonth[0] To 1 Step -1
    If $aDaysOfMonth[$x] <= $iDaysOfMonth Then
    $iDaysOfMonth = $iDaysOfMonth - $aDaysOfMonth[$x]
    $sDaysOfMonth = $x & ', ' & $sDaysOfMonth
    EndIf
    If $iDaysOfMonth = 0 Then ExitLoop
    Next
    $sDaysOfMonth = StringTrimRight($sDaysOfMonth, 2)
    Return ($sDaysOfMonth)
    EndFunc ;==>_GetDaysOfMonth

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetDaysOfWeek($iDayOfWeek = 1)
    Local $sDayOfWeek, $sText
    Local $aDays = _GetPower2(7)

    For $x = $aDays[0] To 1 Step -1
    If $aDays[$x] <= $iDayOfWeek Then
    $iDayOfWeek = $iDayOfWeek - $aDays[$x]
    Switch $aDays[$x]
    Case 1
    $sText = 'Monday'
    Case 2
    $sText = 'Tuesday'
    Case 4
    $sText = 'Wednesday'
    Case 8
    $sText = 'Thursday'
    Case 16
    $sText = 'Friday'
    Case 32
    $sText = 'Saturday'
    Case 64
    $sText = 'Sunday'
    EndSwitch
    $sDayOfWeek = $sText & ', ' & $sDayOfWeek
    EndIf
    If $iDayOfWeek = 0 Then ExitLoop
    Next
    $sDayOfWeek = StringTrimRight($sDayOfWeek, 2)
    Return ($sDayOfWeek)
    EndFunc ;==>_GetDaysOfWeek

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetPower2($iMaxPower2)
    Dim $aPower2[$iMaxPower2 + 1]
    $aPower2[0] = $iMaxPower2
    For $x = 1 To $iMaxPower2
    $aPower2[$x] = 2 ^ ($x - 1)
    Next
    Return ($aPower2)
    EndFunc ;==>_GetPower2

    [/autoit]

    Edit: Irgendwas haut beim Erstellen mit der/den (unterschiedlichen) Zeitzone(n) nicht hin... Auf einem PC klappts, auf dem anderen bekomme ich eine Fehler !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (17. April 2009 um 14:47)