如何在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 }
关键改动说明
- 新增多操作任务的定义函数:
setMultiActionDefinition将原单操作参数tArgs改为数组tArgsList,通过循环为每个参数创建独立的任务操作。 - 新增多操作任务的创建函数:
createMultiActionTask接收多个脚本路径数组,自动生成每个操作的PowerShell执行参数,再调用定义函数完成任务配置。 - 保留原有逻辑:原有的
Run_77任务创建代码完全保留,新增的多操作任务通过独立开关$iscreateMultiActionTask控制是否创建。 - 自定义操作:若不需要执行脚本,可直接传入自定义参数数组,例如:
$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
相关产品推荐
相关产品推荐

