你能用schtasks / query获得LastRunTime吗?

时间:2016-09-19 08:19:56

标签: powershell schtasks

我最终尝试编写一个脚本来计算已运行计划任务的时间,因此如果运行时间超过预期,我们可以让它向我们的数据库记录错误/警告。

目前我正在尝试找到运行计划任务的选择,我想计算时间,以及它们的最后一次运行时间(我应该可以使用它来计算每个作业运行的时间) 。我很难找到最后的运行时间。 我目前有:

$tasks = schtasks /query /fo CSV | ConvertFrom-CSV
$Task = $tasks | Where-Object {($_.TaskName -like '*Backups*') -and ($_.Status -eq 'Running') }

$Task

输出: enter image description here

我尝试了一种不同的方式 - 使用ComObject但无法弄清楚如何从中获取状态:

function getTasks($path) {
$out = @()

# Get root tasks
$schedule.GetFolder($path).GetTasks(0) | % {
    $xml = [xml]$_.xml
    $out += New-Object psobject -Property @{
        "Name" = $_.Name
        "Path" = $_.Path
        "LastRunTime" = $_.LastRunTime
        "Status" = $_.Status
        "Actions" = ($xml.Task.Actions.Exec | % { "$($_.Command) $($_.Arguments)" }) -join "`n"
    }
}

# Get tasks from subfolders
$schedule.GetFolder($path).GetFolders(0) | % {
    $out += getTasks($_.Path)
}

#Output
$out
}

$tasks = @()

$schedule = New-Object -ComObject "Schedule.Service"
$schedule.Connect() 

$tasks += getTasks("\DBA\Backups")

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($schedule) | Out-Null
Remove-Variable schedule

$tasks

输出为:enter image description here

1 个答案:

答案 0 :(得分:0)

有一个Get-ScheduledTask cmdlet可以将结果传送到Get-ScheduledTaskInfo cmdlet以检索LastRunTime

Get-ScheduledTask | select -first 1 | Get-ScheduledTaskInfo

示例输出:

LastRunTime        : 19.09.2016 09:07:07
LastTaskResult     : 0
NextRunTime        : 20.09.2016 09:07:07
NumberOfMissedRuns : 0
TaskName           : GoogleUpdateTaskMachineCore
TaskPath           : \
PSComputerName     : 

Get-ScheduledTask cmdlet为您提供状态。