Список задач

КомандлетОписание
Get-ScheduledTaskкомадлет покажет список всех задач и другую информацию если использовать параметры -taskname, -taskpath, -state.
Get-ScheduledTaskInfo покажет детальную информацию, как время последнего и следующего запуска.

Но чтобы увидеть от какого имени запускается задача, нужно использовать утилиту schtasks.exe. Get-ScheduledTask показывает пользователей частично.

schtasks.exe /query /V /FO CSV | ConvertFrom-Csva|?{$_."run as user" -match "MyUser"} |select taskname
 
# Выводит от чьего имени запускается задание в одном поле "Run As User", группы и пользователи в перемешку.
schtasks.exe /query /V /FO CSV | ConvertFrom-Csv |select taskname,"run as user" | sort -property taskname -Unique
 
# Запуск может быть как от пользователя, так и от группы
 Get-ScheduledTask  | select taskname,@{n="user";e={$_.principal.userid}},@{n="group";e={$_.principal.groupid}},taskpath | ft -a

Автоматический запуск задач

New-Task |
    Add-TaskAction -Hidden -Script {
        $ErrorActionPreference = "Stop"
        try {
            $messageParameters = @{
                Subject = "Installed Program report for $env:ComputerName.$env:USERDNSDOMAIN - $((Get-Date).ToShortDateString())"
                Body = Get-WmiObject Win32_Product |
                    Select-Object Name, Version, Vendor |
                    Sort-Object Name |
                    ConvertTo-Html |
                    Out-String
                From = "Me@MyCompany.com"
                To = "Me@MyCompany.com"
                SmtpServer = "SmtpHost"
            }
            Send-MailMessage @messageParameters -BodyAsHtml
        } catch {
            $_ |
                Out-File $env:TEMP\ProblemsSendingHotfixReport.log.txt -Append -Width 1000
        }
    } |
 
Add-TaskTrigger -Daily -At "9:00 AM" |
Add-TaskTrigger -OnRegistration |
Register-ScheduledTask "DailyHotfixReport"

Добавление задачи из XML в Task Scheduler

 Register-ScheduledTask -xml (Get-Content 'C:\MyData\MyTask.xml' | Out-String) -TaskName "Start DC" -TaskPath "\" -User administrator -Force

Вывод списка задач и имени пользователя, от которого запускаются задачи

$tasks = Get-ScheduledTask -TaskPath "\" | ?{$_.Author -match "myuser"}
 
foreach ($task in $tasks) {
    $info = Get-ScheduledTaskInfo -TaskName $task.TaskName -TaskPath $task.TaskPath
    [PSCustomObject]@{
        Имя_задачи     = $task.TaskName
        Путь           = $task.TaskPath
        Запуск_от      = $task.Principal.UserId
        Последний_запуск = $info.LastRunTime
        Статус         = $info.LastTaskResult
    }
}