You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中创建计划任务时添加多个操作

为计划任务添加多操作的PowerShell代码修改方案

原代码仅支持为计划任务创建单个操作,以下是修改后的代码,可实现创建包含多个操作(示例为3个)的计划任务,同时保留原有代码的结构和功能:

$taskCommand = "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe"
$taskStartTime = [datetime]::Now.AddMinutes(1) 
$taskBaseArguments="-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted"
 
$service = new-object -ComObject("Schedule.Service")
$service.Connect()
$rootFolder = $service.GetFolder("\")

$iscreate77Task=$true
$iscreateMultiActionTask=$true # 新增开关控制多操作任务的创建

Function setMultiActionDefinition {
    param (
        $tDefinition,
        $tDesc,
        $tInterval,
        [string[]]$tArgsList # 修改为数组类型,接收多个操作的参数
    )
    $tDefinition.RegistrationInfo.Description = "$tDesc"
    $tDefinition.Settings.Enabled = $true
    $tDefinition.Settings.AllowDemandStart = $true

    $tDefinition.Settings.DisallowStartIfOnBatteries=$false
    $tDefinition.Settings.RunOnlyIfNetworkAvailable=$true
    $tDefinition.Settings.ExecutionTimeLimit="PT1H"

    $tDefinition.Principal.RunLevel =1

    $triggers = $tDefinition.Triggers
    $trigger = $triggers.Create(2) 
    $trigger.StartBoundary = $taskStartTime.ToString("yyyy-MM-dd'T'HH:mm:ss")            
    #$trigger.Repetition.Interval= "PT"+"$tInterval"+"M"
    $trigger.Enabled = $false

    # 循环创建多个操作
    foreach ($args in $tArgsList) {
        $action = $tDefinition.Actions.Create(0)
        $action.Path = "$taskCommand"
        $action.Arguments = "$args"
    }
}

Function createMultiActionTask {
    param(
        $taskName = "Run_Multi_Scripts",
        [string[]]$taskScripts = @(
            "C:\code-client\Script1.ps1",
            "C:\code-client\Script2.ps1",
            "C:\code-client\Script3.ps1"
        ), # 传入多个脚本路径
        $taskDescr = "执行多个PowerShell脚本任务",
        $taskDefinition = $service.NewTask(0),
        $interval=2          
    )
    # 生成每个操作对应的参数列表
    $taskArgsList = $taskScripts | ForEach-Object { "$taskBaseArguments -file $_" }
    setMultiActionDefinition -tDefinition $taskDefinition -tDesc $taskDescr -tInterval $interval -tArgsList $taskArgsList
    $rootFolder.RegisterTaskDefinition("$taskName",$taskDefinition,6,"System",$null,5)
}

# 保留原有单操作任务的创建逻辑
Function set77Definition {
    param ($tDefinition,$tDesc, $tInterval, $tArgs)
            $tDefinition.RegistrationInfo.Description = "$tDesc"
            $tDefinition.Settings.Enabled = $true
            $tDefinition.Settings.AllowDemandStart = $true

            $tDefinition.Settings.DisallowStartIfOnBatteries=$false
            $tDefinition.Settings.RunOnlyIfNetworkAvailable=$true
            $tDefinition.Settings.ExecutionTimeLimit="PT1H"

            $tDefinition.Principal.RunLevel =1

            $triggers = $tDefinition.Triggers
            $trigger = $triggers.Create(2) 
            $trigger.StartBoundary = $taskStartTime.ToString("yyyy-MM-dd'T'HH:mm:ss")            
            #$trigger.Repetition.Interval= "PT"+"$tInterval"+"M"
            $trigger.Enabled = $false

            $action = $tDefinition.Actions.Create(0)
            $action.Path = "$taskCommand"
            $action.Arguments = "$tArgs"
}

 Function create77Task {
    param(
        $taskName = "Run_77",
        $taskScript = "C:\code-client\Run_77.ps1",
        $taskDescr = "启动和停止进程以辅助启动77",
        $taskArg = "$taskBaseArguments -file $taskScript",
        $taskDefinition = $service.NewTask(0),
        $interval=2          
    )
       set77Definition -tDefinition $taskDefinition -tDesc $taskDescr -tInterval $interval -tArgs $taskArg
        $rootFolder.RegisterTaskDefinition("$taskName",$taskDefinition,6,"System",$null,5)
}

if($iscreate77Task){
create77Task
}

# 新增多操作任务的创建逻辑
if($iscreateMultiActionTask){
createMultiActionTask
}

关键改动说明

  1. 新增多操作任务的定义函数:setMultiActionDefinition将原单操作参数tArgs改为数组tArgsList,通过循环为每个参数创建独立的任务操作。
  2. 新增多操作任务的创建函数:createMultiActionTask接收多个脚本路径数组,自动生成每个操作的PowerShell执行参数,再调用定义函数完成任务配置。
  3. 保留原有逻辑:原有的Run_77任务创建代码完全保留,新增的多操作任务通过独立开关$iscreateMultiActionTask控制是否创建。
  4. 自定义操作:若不需要执行脚本,可直接传入自定义参数数组,例如:
    $customArgs = @(
        "$taskBaseArguments -Command 'Write-Host 操作1'",
        "$taskBaseArguments -Command 'Write-Host 操作2'",
        "$taskBaseArguments -Command 'Write-Host 操作3'"
    )
    setMultiActionDefinition -tDefinition $taskDefinition -tDesc "自定义多操作任务" -tInterval 2 -tArgsList $customArgs
    

内容的提问来源于stack exchange,提问作者jakebake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:22:37