2016-09-19 46 views
1

我最終試圖編寫一個腳本來計算一個計劃任務已經運行了多長時間,所以如果運行時間比預期的要長,我們可以讓它記錄一個錯誤/警告給我們的數據庫。你可以使用schtasks/query獲得LastRunTime嗎?

目前我因此試圖找到運行計劃任務的選擇我想指望的時候,和他們最後的運行時(這是我應該再能夠使用計算多久每個作業已運行)。儘管如此,我仍在努力尋找最後的運行時間。 我目前有:

$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

回答

0

有一個Get-ScheduledTask CMDL等而導致可管道輸送到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小命令爲您提供的狀態。

相關問題