如果您只想收集任务的基本属性,以便知道它的名称状态和下次运行时间,您可以通过以下方法使用 schtasks:
function New-TaskInfo()
{
param ($TaskPath, $TaskName, $NextRunTime, $Status);
$task = new-object PSObject;
$task | add-member -type NoteProperty -Name Path-Value $TaskPath;
$task | add-member -type NoteProperty -Name Name -Value $TaskName;
$task | add-member -type NoteProperty -Name NextRunTime -Value $NextRunTime;
$task | add-member -type NoteProperty -Name Status -Value $Status;
return $task;
}
function Get-ScheduledTaskInfo
{
$tasks = @();
$queryOutput = schtasks /QUERY /FO CSV
foreach($line in $queryOutput)
{
$columns = $line.Split(',');
$taskPath = $columns[0].Replace('"', '');
if($taskPath -eq "TaskName")
{
#Ignore headder lines
continue;
}
$taskName = [System.IO.Path]::GetFileName($taskPath);
$nextRunTime = $columns[1].Replace('"', '');
$status = $columns[2].Replace('"', '');
$task = New-TaskInfo -TaskPath $taskPath -TaskName $taskName -NextRunTime $nextRunTime -Status $status;
Write-Host -ForegroundColor Green "Add Task $task";
$tasks += $task;
}
return $tasks;
}
如果您想为特定任务执行操作,您可以使用 schtasks 直接指定存储在之前收集的对象中的数据。
$task = Get-ScheduledTaskInfo | Where-Object {$_.Name -eq 'TaskName'}
if($task.Status -eq 'Ready')
{
Write-Host -ForegroundColor Green "Task" $task.Name "Is" $task.Status;
#End the target task
schtasks /END /TN $task.Path;
}