显示包含“操作”的任务计划程序作业

时间:2018-03-13 14:42:27

标签: powershell scheduled-tasks

我希望看到“操作”不为空的所有任务计划程序作业。

我从这个链接获得了初始代码: Task Scheduler in powershell script

例如,我不希望看到名为“优化开始菜单缓存文件”的计划任务,因为“操作”为空。

$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$out = @()
$sched.GetFolder("\").GetTasks(0) | % {
    $xml = [xml]$_.xml

    $out += New-Object PSObject -Property @{
        "Name" = $_.Name
        "Status" = switch ($_.State) {0 {"Unknown"} 1 {"Disabled"} 2 {"Queued"} 3 {"Ready"} 4 {"Running"}}
        "Actions" = ($xml.Task.Actions.Exec | % { "$($_.Command) $($_.Arguments)" }) -join "`n"
        "NextRunTime" = $_.NextRunTime
        "LastRunTime" = $_.LastRunTime
        "LastRunResult" = $_.LastTaskResult
        "Author" = $xml.Task.Principals.Principal.UserId
        "Created" = $xml.Task.RegistrationInfo.Date
    }
}

$out | fl Name,Status,Actions,NextRuNTime,LastRunTime,LastRunResult,Author,Created | Where-Object {($_.Actions -ne "" -and $_.Actions -eq "*powershell*" -or $_.Actions -ne $null)}

2 个答案:

答案 0 :(得分:1)

这适用于比Windows 7更新的任何内容。

get-scheduledtask |Where-Object {$_.actions -NE $Null -OR $_.actions -NE "" }

答案 1 :(得分:0)

我最终选择了以下内容,但是在where语句中我不能有多个子句。

$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$out = @()
$sched.GetFolder("\").GetTasks(0) | % {
    $xml = [xml]$_.xml

    $out += New-Object PSObject -Property @{
        "Name" = $_.Name
        "Status" = switch ($_.State) {0 {"Unknown"} 1 {"Disabled"} 2 {"Queued"} 3 {"Ready"} 4 {"Running"}}
        "Actions" = ($xml.Task.Actions.Exec | % { "$($_.Command) $($_.Arguments)" }) -join "`n"
        "NextRunTime" = $_.NextRunTime
        "LastRunTime" = $_.LastRunTime
        "LastRunResult" = $_.LastTaskResult
        "Author" = $xml.Task.Principals.Principal.UserId
        "Created" = $xml.Task.RegistrationInfo.Date
    }
}

$out |Where Actions -like "*powershell*"