Щоб зробити те, що ви хочете, вам потрібно буде створити спеціальний об'єкт і заповнити об'єкт деталями з schtasks
результатів. Це дасть вам можливість робити те, що ви шукаєте. Я за цей час робив проект на роботі. Я отримаю доступ до цього коду в неділю, і тоді опублікую його.
Ось сценарій запланованого запиту завдань, який я створив, оскільки це був один із моїх перших сценаріїв, він не дуже гарний, але він повинен мати всю необхідну інформацію:
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
}
}
Він по суті запитує сервер для всього запланованого списку завдань і отримує вихід у вигляді масиву. Потім він здійснює пошук виводу для рядка, який містить конкретну заплановану задачу. Після того, як це буде знайдено, він генерує масив рядків даних, що шукаються (що в цій точці не має інформації заголовка). Потім, використовуючи інформацію заголовка, яку заплановане завдання повертає як масив, він будує спеціальний об'єкт з кожним фрагментом інформації заголовка як властивість, яка потім заповнюється даними з масиву конкретної задачі.
Через спосіб створення об’єкта, ви, ймовірно, можете налаштувати цей скрипт, щоб дозволити включення декількох запланованих завдань. Як відомо, вихід фільтрується через змінну $ listHeaders, але ви можете вразити це і просто вивести об’єкт $ arrTaskObj до труби, яка дозволить вам зателефонувати та отримати доступ до властивостей.