Чтобы сделать то, что вы хотите, вам нужно создать пользовательский объект и заполнить объект данными из 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 в канал, который позволит вам вызывать и получать доступ к свойствам.