Powershell - 每月计划任务触发器

标签 powershell powershell-4.0

我目前正在通过 Powershell 自动创建计划任务,并且我正在使用 New-ScheduledTaskAction , New-ScheduledTaskTrigger ,和Register-ScheduledTask命令。现在,我有一些作业需要在以下条件下运行:

  • 每周五运行一次
  • 每月 1 日运行一次
  • 每月 10 日运行一次

technet documentation对于New-ScheduledTaskTrigger命令指定 DailyWeekly时间跨度参数,我没有看到Monthly ,这对于定义上述运行时间至关重要。

在我使用 Powershell 的几年里,我想不出有什么实例可以让我通过标准 UI 界面做一些我做不到的事情 em> 使用可用命令之一完成。

这是否在这里完全不可用,或者我错过了什么?

更新#1

我刚刚偶然发现了这个SuperUser question ,看起来确实很有希望,但引用的是 PSV3 而不是 PSV4 - 将尝试一下并报告回来。

最佳答案

正如我在原来的帖子中所说,上面的 super 用户问题看起来很有希望,但最终不适用于 PSV4,并且帖子中给出的示例基本上是一个几乎没有上下文的复制\粘贴工作。

我意识到我可以利用 Schtasks.exe从我的 Powershell 脚本来处理每月的聚合,设置起来相当容易,尽管有点乏味:

# set the trigger depending on time, span, and day
$runSpan = $task.SpanToRun;

if ($runSpan.Equals("Daily"))
{            
    $trigger = New-ScheduledTaskTrigger -Daily -At $task.TimeToRun
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName $task.TaskName -User $Username -Password $Password -Description $task.Description       
}

if ($runSpan.Equals("Weekly"))
{            
    $trigger = New-ScheduledTaskTrigger -Weekly -At $task.TimeToRun -DaysOfWeek $task.DayToRun
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName $task.TaskName -User $Username -Password $Password -Description $task.Description
}        

#  script out SchTasks magic to create the monthly tasks
if ($runSpan.Equals("Monthly"))
{
    $taskParams = @("/Create",
                "/TN", $task.TaskName, 
                "/SC", "monthly", 
                "/D", $task.DayToRun, 
                "/ST", $task.TimeToRun, 
                "/TR", $filePath, 
                "/F", #force
                "/RU", $Username,
                "/RP", $Password);

    # supply the command arguments and execute  
    #schtasks.exe $taskParams
     schtasks.exe @taskParams
}

我使用脚本内类来跟踪所有任务属性($task.TimeToRun$task.DayToRun 等),进行迭代在这些列表中,应用 Powershell 实现来执行每日和每周的任务,然后切换到 SchTasks.exe 来执行每月的任务。

我要注意的一件事是,乍一看,我认为设置任务运行的用户上下文可以通过UP 论点,但事实并非如此。它指定 Schtasks.exe 运行的凭据 - 为了设置任务的用户上下文,您必须使用 RURP

除了上面的链接之外,这两个也非常有帮助:

http://coding.pstodulka.com/2015/08/02/programmatically-scheduling-powershell-scripts-in-task-scheduler/

https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx

关于Powershell - 每月计划任务触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799923/

相关文章:

c# - 在使用 Powershell Api 时,有什么方法可以在 C# 中将 PSObject 转换为字符串

powershell - 在Powershell中,如何将 'June 6th 2017, 08:09:05.000'日期转换为[DateTime]?

powershell - 使用 PowerShell 合并多个文本文件并生成一个新的单个文本文件?

Powershell 不正确的日期排序

powershell - 如何运行带有BAT文件中极长参数的程序?

powershell - Docker在使用powershell时将图像保存为两倍 - 保存原始字节流

powershell - 如何将 AzureDevops 中的 Powershell 7 与 AWS 工具结合使用

powershell - 如何跳过 Get-ChildItem 返回访问被拒绝的错误

regex - PowerShell在文件行为中查找并替换为正则表达式

powershell - Invoke-Command 行为澄清