Властивості запланованих завдань у PowerShell?


3

Я не впевнений, як це зробити в PowerShell, але я не думаю, що це підтримується.

Наприклад:

$tasks = schtasks /query 

Збереже всі завдання у змінну $tasks

Приклад виводу:

Folder: \Microsoft\Windows\WindowsBackup
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
ConfigNotification                       Disabled

Властивість "TaskName" не може бути легко названа (тобто $tasks.TaskName)

Чи є якийсь інший спосіб посилатися на властивість TaskName в межах $tasksзмінної, як-от як ви можете посилатися на властивості в командлеті get-service?

$services = gsv
$services | Where-Object { Write-Output $_.Name }

Має щось
спільне

додав сценарій до моєї відповіді; сподіваємось, що це допоможе вам вийти
Матрікс Моль

Відповіді:


5

Використовуйте параметр / fo в schtasks, щоб надрукувати вихід у вигляді CSV, а потім перетворите висновок в об'єкт Powershell за допомогою команди ConvertFrom-CSV .

$tasks = schtasks /query /fo CSV | ConvertFrom-CSV

Потім можна скористатися пошуком певної назви завдання наступним чином

$myTask = $tasks | Where-Object {$_.TaskName -eq "My_Scheduled_Task"}

0

Щоб зробити те, що ви хочете, вам потрібно буде створити спеціальний об'єкт і заповнити об'єкт деталями з 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 до труби, яка дозволить вам зателефонувати та отримати доступ до властивостей.


0

Я використовую VisualCron, який є інструментом автоматизації, як планувальник завдань. У ньому є специфічне завдання для виконання Powershell. Є два режими - inprocess, який дозволяє вводити PS-код у VisualCron, а також можливе посилання на існуючий файл PS.

У будь-якому випадку ви можете використовувати вбудований в змінних VisualCron для передачі інформації безпосередньо в сценарій Powershell.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.