【问题标题】:Schedule task to run monthly with current date time计划任务以当前日期时间每月运行
【发布时间】:2018-09-16 01:38:42
【问题描述】:

我正在使用 powershell 的 Register-ScheduledTask 模块来创建一个在每个月的第一天运行的计划任务。

Register-ScheduledTask -Xml (Get-Content -Path PathtoXml.xml | Out-String) -TaskName TaskName"

xml有以下内容-

 <Triggers>
<CalendarTrigger>
  <StartBoundary>2017-12-01T11:00:00</StartBoundary>
  <Enabled>true</Enabled>
  <ScheduleByMonth>
    <DaysOfMonth>
      <Day>1</Day>
    </DaysOfMonth>
    <Months>
      <January />
      <February />
      <March />
      <April />
      <May />
      <June />
      <July />
      <August />
      <September />
      <October />
      <November />
      <December />
    </Months>
  </ScheduleByMonth>
</CalendarTrigger>

我面临的问题是 StartBoundary。我不想为 StartBoundary 提供修复日期,因为过去的日期不会激活任务。这也是一个强制性的论点。

有没有我能做到的?

【问题讨论】:

    标签: windows powershell scheduled-tasks


    【解决方案1】:

    你做了一个错误的假设。 StartBoundary 可以是过去的一段时间。任务执行将相对于StartBoundary 中设置的时间进行。在这种情况下,日期无关紧要。日期也可以是未来的时间。直到该日期之后,该任务才会运行。

    要激活您的任务,您还需要启用它:

      <Settings>
        <Enabled>true</enabled>
      </Settings>
    

    【讨论】:

      【解决方案2】:

      如果问题在于您的 XML 文件中的占位符日期已过时,并且您需要在每次使用该文件时对其进行更新,那么一种方法是在您阅读时进行简单的文本替换内容。例如,此代码会将占位符与未来 5 分钟后的日期交换:

      $xml = (Get-Content -Path PathtoXml.xml -Raw) -replace `
             "(?<=<StartBoundary>).*(?=</StartBoundary>)", (Get-Date).AddMinutes(5).ToString('s')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 2021-04-07
        • 1970-01-01
        • 2015-05-19
        相关资源
        最近更新 更多