Para fazer o que você deseja, você precisará criar um objeto personalizado e preencher o objeto com os detalhes da saída schtasks
. Isso lhe dará a capacidade de fazer o que você está procurando. Eu fiz um projeto no trabalho por algum tempo atrás. Eu terei acesso a esse código no domingo e postarei isso em seguida.
Aqui está o Script de consulta da Tarefa Agendada que criei, já que era um dos meus primeiros scripts, não é muito bonito, mas deveria ter todas as informações de que você precisa:
function query_tasks
{
if ($args -eq '/?')
{
Write-Output "Usage: query_tasks ComputerName taskname"
Write-Output "Task name defaults to wildcard search and can be multiple words."
Write-Output "Computer name, and task names must be included."
}
elseif ($args.length -lt 2)
{
Write-Output "Error: Must include computer name and partial task name to search for."
}
else
{
$CompName = $args[0]
$Tasks = $args[1..($args.length-1)]
$arrTasks = $(schtasks /query /v /fo csv /s $CompName)
$taskName = "'"*$Tasks*'""
$arrTask = $arrTasks -like $taskName -split '","'
$arrSchTasksAttributes = @( )
$arrSchTasksAttributes += "HostName"
$arrSchTasksAttributes += "TaskName"
$arrSchTasksAttributes += "NextRunTime"
$arrSchTasksAttributes += "Status"
$arrSchTasksAttributes += "LastRunTime"
$arrSchTasksAttributes += "LastResult"
$arrSchTasksAttributes += "Creator"
$arrSchTasksAttributes += "Schedule"
$arrSchTasksAttributes += "TaskToRun"
$arrSchTasksAttributes += "StartIn"
$arrSchTasksAttributes += "Comment"
$arrSchTasksAttributes += "ScheduledTaskState"
$arrSchTasksAttributes += "ScheduledType"
$arrSchTasksAttributes += "StartTime"
$arrSchTasksAttributes += "StartDate"
$arrSchTasksAttributes += "EndDate"
$arrSchTasksAttributes += "Days"
$arrSchTasksAttributes += "Months"
$arrSchTasksAttributes += "RunAsUser"
$arrSchTasksAttributes += "DeleteTaskIfNotRescheduled"
$arrSchTasksAttributes += "StopTaskIfRunsXHoursandXMins"
$arrSchTasksAttributes += "Repeat_Every"
$arrSchTasksAttributes += "Repeat_Until_Time"
$arrSchTasksAttributes += "Repeat_Until_Duration"
$arrSchTasksAttributes += "Repeat_StopIfStillRunning"
$arrSchTasksAttributes += "IdleTime"
$arrSchTasksAttributes += "PowerManagement"
$arrTaskObj = $null
$arrTaskObj = New-Object psobject
for ($t = 0; $t -lt $arrTask.length; $t++)
{
Add-Member -InputObject $arrTaskObj -MemberType NoteProperty '
-Name $arrSchTasksAttributes[$t] -Value $arrTask[$t]
}
$listHeaders = @{Expression={$_.HostName};Label="Host Name"}, @{Expression={$_.TaskName};Label="Task Name"}, @{Expression={$_.NextRunTime};Label="Next Run Time"}, @{Expression={$_.LastRunTime};Label="Last Run Time"}, @{Expression={$_.LastResult};Label="Last Result"}, @{Expression={$_.Status};Label="Current Status"}
$arrTaskObj | Format-List $listHeaders
}
}
Essencialmente, ele consulta o servidor durante toda a lista de tarefas agendadas e recebe a saída como uma matriz. Em seguida, procura na saída a linha que contém a tarefa planejada específica. Uma vez encontrado, ele gera uma matriz da linha de dados das tarefas pesquisadas (que não possui informações de cabeçalho neste momento). Em seguida, usando as informações de cabeçalho que a tarefa agendada retorna como uma matriz, ele cria um objeto personalizado com cada informação de cabeçalho como uma propriedade que é então preenchida com os dados da matriz da tarefa específica.
Devido à maneira como o objeto é criado, você provavelmente poderia ajustar esse script para permitir a inclusão de várias tarefas agendadas. Da forma como está, a saída é filtrada através da variável $ listHeaders, mas você pode fazer isso e apenas gerar o objeto $ arrTaskObj para o pipe, o que permitiria chamar e acessar as propriedades para.