PowerShell 中的计划任务属性?

PowerShell 中的计划任务属性?

我不确定如何在 PowerShell 中执行此操作,但我认为它不受支持。

例如:

$tasks = schtasks /query 

将所有任务存储到变量中$tasks

示例输出:

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

属性“TaskName”不能轻易引用(即$tasks.TaskName

是否有其他方法可以引用变量中的 TaskName 属性$tasks,类似于如何在 get-service cmdlet 中引用属性?

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

答案1

使用/fo参数调度任务将输出打印为 CSV,然后使用转换自-CSV命令。

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

然后,您可以按如下方式搜索特定任务名称

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

答案2

要实现您想要的功能,您需要构建一个自定义对象,并使用输出中的详细信息填充该对象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 对象输出到管道,这将允许您调用和访问其属性。

答案3

我在用可视化Cron这是一个类似于任务调度程序的自动化工具。它有一个用于执行 Powershell 的特定任务。有两种模式 - inprocess,允许您在 VisualCron 中输入 PS 代码,也可以链接到现有的 PS 文件。

无论哪种方式,您都可以使用 VisualCron 内置变量将信息直接传递到 Powershell 脚本。

答案4

在 Powershell/pwsh 中,使用Get-ScheduledTask[參考] 或者Get-ScheduledTaskInfo改为。

相关内容