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

如何修改PowerShell脚本实现每月指定日期执行计划任务?

问题:如何调整PowerShell脚本,让计划任务每月1日触发执行?

我想创建一个每月1日启动的月度计划任务。现在的脚本能运行,但只能创建每4周在指定日期执行的任务。我需要任务在固定日期执行,这样服务器停机告警时,能明确是这个计划任务导致的。

当前脚本代码:

# 目前PS v5.1无法直接设置“每月1日”这类计划。
# 以下是最接近月度计划的实现,但严格基于周数间隔。
$ErrorActionPreference = "SilentlyContinue"

$ScheduledTaskActions = @{
    Execute  = "powershell.exe"
    Argument = "Restart-Computer -Force"
}

$TaskAction = New-ScheduledTaskAction @ScheduledTaskActions

$ScheduledTaskParameters = @{
    TaskName = "Restart Computer - Monthly"
    Trigger = New-ScheduledTaskTrigger -At "00:00" -Weekly -WeeksInterval "4" -DaysOfWeek "Monday"
    Action = $TaskAction
    User = "NT Authority\System"
    Runlevel = "Highest"
    Description = "Reboots the machine every four weeks."
}

Register-ScheduledTask @ScheduledTaskParameters

上述代码生成的触发器是每4周周一00:00执行,但我需要的是每月1日执行的触发器。

我曾尝试用$trigger = $triggers.Create(4)创建月度触发器,但查完微软文档还是不知道该代码的正确插入位置,而且这也不是标准PowerShell语法。我找到了相关参考链接,但没完全理解实现方式,也没找到完整示例。


更新后的脚本

在MisterSmith的帮助下,我测试了以下脚本,效果符合预期。我曾修改日期条件$Date.Day -le "27"和星期条件$Date.DayOfWeek -eq "Wednesday",手动触发任务后服务器成功重启,之后我恢复设置,将任务改为每月第一个周一执行。

$ErrorActionPreference = "SilentlyContinue"
# 执行核心操作的命令
$Command = {
    $Date = Get-Date
    if(($Date.Day -le "7") -and ($Date.DayOfWeek -eq "Monday")){
        Restart-Computer -Force
    }
}

# 将命令块转换为Base64编码,便于添加到计划任务
$Base64Command = [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Command))

## 创建计划任务
# 任务命令与参数的哈希表,参数为上述Base64编码命令
$ScheduledTaskActions = @{
    Execute = "powershell.exe"
    Argument = "-EncodedCommand $Base64Command"
}

# 任务操作变量
$TaskAction = New-ScheduledTaskAction @ScheduledTaskActions

# Register-ScheduledTask使用的参数哈希表
$ScheduledTaskParameters = @{
    TaskName = "Restart Computer - First Monday of Every Month"
    Trigger = New-ScheduledTaskTrigger -At "00:30" -Weekly -DaysOfWeek "Monday"
    Action = $TaskAction
    User = "NT Authority\System"
    Runlevel = "Highest"
    Description = "Reboots the machine on the first Monday of every month."
}

# 注册新计划任务
Register-ScheduledTask @ScheduledTaskParameters -Force

该脚本在Windows任务计划程序中的显示效果:

  • 触发器:每周一00:30执行
  • 触发器详情:每周触发一次,执行时间为周一00:30
  • 操作:运行powershell.exe并执行Base64编码的命令块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:17:28