gpt4 book ai didi

powershell - 在任务计划中添加第二个触发器

转载 作者:行者123 更新时间:2023-12-04 01:38:32 24 4
gpt4 key购买 nike

有一个 powershell 脚本,它将创建一个计划任务,通过 Octopus 部署到 Windows 2012 服务器。

Function Create-ScheduledTask($TaskName,$RunAsUser,$TaskRun,$Schedule,$StartTime,$StartDate,$Arguments,$RunWithElevatedPermissions,$Days,$Password){
# set up
$Command = "schtasks.exe /create /ru `"$RunAsUser`" /tn `"$TaskName`" /tr `"'$($TaskRun)' $Arguments`" $cmdSchedule $cmdDays $cmdStartDate $cmdStartTime /F $cmdInterval $cmdDuration $cmdRunLevel $cmdPassword"

echo $Command
Invoke-Expression $Command
}

尝试在命令行上添加另一个触发器作为相同任务名的一部分将不适用于 schtasks.exe这似乎与可以完成的 GUI 相矛盾。

这是用于创建事件触发器的函数,理想情况下,将其附加到相同的计划任务。
Function Create-ScheduledTaskEvent($TaskName,$RunAsUser,$TaskRun,$Arguments,$RunWithElevatedPermissions,$Password, $xPath, $channelName){

$cmdRunLevel = if(-Not $RunWithElevatedPermissions){""}else{"/rl HIGHEST"}
$cmdPassword = if([string]::IsNullOrEmpty($Password)){""}else{"/rp `"$Password`""}
$cmdXPath = if([string]::IsNullOrEmpty($xPath)){""}else{"/sc ONEVENT /MO `"$xPath`" "}
$cmdRunLevel = if(-Not $RunWithElevatedPermissions){""}else{"/rl HIGHEST"}

$Command = "schtasks.exe /create $cmdRunLevel /ru `"$RunAsUser`" $cmdXPath /tn `"$TaskName`" /tr `"'$($TaskRun)' $Arguments`" /ec `"$channelName`" "

echo $Command
Invoke-Expression $Command
}

问题是,更换开关 /create/change最终只会破坏上一个计划任务的触发器/操作。

知道如何通过 schtasks.exe 做到这一点在命令行上,将触发器合二为一。

可以通过创建具有不同任务名称的单独任务计划来完成,但这并不理想,也不是将任务导出为 xml 然后重新导入。

最佳答案

schtasks.exe不允许您通过基本开关执行此操作。为了能够通过 schtasks.exe 做到这一点您可以使用现有任务的 XML 导入,as mentioned on SU .

Scheduled Tasks GUI

使用您希望稍后导入的触发器集导出现有任务。 PowerShell 还可以通过 [xml] 本地理解 xml 文件类型转换和 Select-XML因此,您不仅限于静态 XML 文件,还可以根据需要对现有文件进行动态更改。

根据您使用的系统,您还可以访问 PowerShell 任务操作 cmdlet,如 Register-ScheduledTask 这确实允许配置多个任务。这些可以在 Windows Server 2012 R2 和 Windows 8.1 上找到。从 TechTarget 中提取一个小片段

$triggers = @()
$triggers += New-ScheduledTaskTrigger -Daily -At 03:00
$triggers += New-ScheduledTaskTrigger -Daily -At 09:00
$triggers += New-ScheduledTaskTrigger -Daily -At 15:00
$triggers += New-ScheduledTaskTrigger -Daily -At 21:00

#..... code truncated to only show trigger portion

$action = New-ScheduledTaskAction -Execute $pstart -Argument $actionscript
Register-ScheduledTask -TaskName $taskname -Action $action -Trigger $triggers -RunLevel Highest -Description “Test job”


由于您标记了 2012 年,如果它不是 8.1,您可能可以在您自己的系统的 PSSession 中运行这些 cmdlet

关于powershell - 在任务计划中添加第二个触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39290601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com