我最终尝试编写一个脚本来计算已运行计划任务的时间,因此如果运行时间超过预期,我们可以让它向我们的数据库记录错误/警告。
目前我正在尝试找到运行计划任务的选择,我想计算时间,以及它们的最后一次运行时间(我应该可以使用它来计算每个作业运行的时间) 。我很难找到最后的运行时间。 我目前有:
$tasks = schtasks /query /fo CSV | ConvertFrom-CSV
$Task = $tasks | Where-Object {($_.TaskName -like '*Backups*') -and ($_.Status -eq 'Running') }
$Task
我尝试了一种不同的方式 - 使用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
答案 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为您提供状态。