Создайте запланированное задание, которое запускается первого числа каждого месяца

Вопрос: Как мне настроить этот сценарий, чтобы можно было запланировать запуск задачи первого числа каждого месяца?

Мой сценарий приведен ниже, и я пытаюсь запланировать ежемесячное задание, которое начинается 1-го числа каждого месяца. Технически мой код работает; он создает задание, которое запускается в определенный день каждые четыре недели. Но я бы предпочел, чтобы оно было запущено в определенную дату, чтобы, когда мы получим оповещения о сбоях на наших серверах, мы знали, что это запланированная задача.

# As of this time, PS v5.1 has no easy way to choose a schedule like "the first of every month."
# Below is the closest I can get to a monthly schedule but it's strictly based on number of weeks.
$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

По сути, вышеупомянутый код генерирует триггер, который выглядит в планировщике задач следующим образом, но, опять же, мне нужно что-то, что действительно запускается первого числа каждого месяца.

Это то, что мне нужно:

На мой взгляд, я подумал, что мог бы сделать что-то вроде $trigger = $triggers.Create(4), чтобы сделать это ежемесячным, но даже после просмотра некоторых статей MS, связанных с вышеупомянутыми вопросами, я не знаю, куда поместить этот код на место; похоже, что технически на этих страницах MS нет кода PS.

Я нашел Создать ежемесячный триггер для запланированной задачи в Powershell (с дополнительными критериями) и Powershell для создания запланированной задачи, в которой выполняется ежемесячно, но я до сих пор не до конца понимаю, как у них что-то работает. Я не знаю, то ли у них просто не было полного примера, то ли я просто не могу понять, как они это заработали.

Обновленный скрипт

Благодаря помощи MisterSmith я использую это сейчас. По моему тестированию, кажется, работает нормально! Я изменил переменную даты $Date.Day -le "27" и переменную дня на $Date.DayOfWeek -eq "Wednesday", а затем вручную запустил задачу после создания. Машина подпрыгнула, как и ожидалось. Затем я отменил эти изменения и воссоздал задачу так, чтобы она запускалась в первый понедельник каждого месяца. С точки зрения машины, задача загадочна, но она порождена нашим RMM, поэтому я не беспокоюсь о том, как она выглядит — пока мои товарищи по команде могут читать и понимать код.

$ErrorActionPreference = "SilentlyContinue"
# Command that does the work.
$Command = {
    $Date = Get-Date
    if (($Date.Day -le "7") -and ($Date.DayOfWeek -eq "Monday")){
        Restart-Computer -Force
    }
}

# Convert the command block above to a Base64-encoded command so it can be easily added to a scheduled task.
$Base64Command = [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Command))

## Creating the Scheduled Task.
# Hash table for task's command and arguments; in this case, the argument is the Base64-encoded command from above.
$ScheduledTaskActions = @{
    Execute = "powershell.exe"
    Argument = "-EncodedCommand $Base64Command"
}

# Variable for the task's action.
$TaskAction = New-ScheduledTaskAction @ScheduledTaskActions

# Hash table for parameters used by 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."
}

# Registering the new task with all the settings above.
Register-ScheduledTask @ScheduledTaskParameters -Force

Как это выглядит в планировщике задач Windows: Триггеры:

Детали триггера:

Действия:

i.sstatic.net/2FqV8M6N.png ? (некоторые изображения говорят больше, чем слова..., но вопрос неясен, если увидеть изображение из планировщика задач)
Luuk 20.08.2024 19:33

После вашего редактирования до сих пор не понятно, почему вы не можете использовать: i.sstatic.net/Wx1xE2gw.png

Luuk 20.08.2024 19:49

Вы не можете с помощью командлета. Я думаю, вы можете преобразовать код С# в PS. Будем работать над решением.

jdweng 20.08.2024 20:44

Найден исходный код: github.com/microsoftarchive/msdn-code-gallery-microsoft/blob‌​/…

jdweng 20.08.2024 21:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Простой метод PowerShell — выполнять сценарий каждый понедельник в планировщике задач, затем в PowerShell решать, является ли это 1-м понедельником месяца или нет, и перезапускать при необходимости.

Обновите свое действие, чтобы вызвать файл вместо Restart-Computer напрямую.

$ScheduledTaskActions = @{
  Execute  = "powershell.exe"
  Argument = '-File C:\path\to\your\restart-script.ps1'
}

Создайте restart-script.ps1 где-нибудь, используя приведенное ниже. Его следует выключить только в том случае, если сегодня понедельник и в течение первых 7 дней месяца, в противном случае он ничего не делает:

$d = Get-Date;
if (($d.Day -le 7) -and ($d.DayOfWeek -eq 'Monday')){
  Restart-Computer -Force
}

Наконец, запускайте скрипт каждый понедельник:

$Trigger = New-ScheduledTaskTrigger -At "00:00" -Weekly -DaysOfWeek "Monday"

Если вы действительно не хотите иметь дело с управлением restart-script.ps1 / действительно хотите, чтобы все это содержалось в сценарии диспетчера задач, вы можете преобразовать приведенный выше сценарий в байты Юникода, обернуть его строкой base64 и передать его в powershell с помощью powershell -EncodedCommand [BASE64_STRING_ENCODED_UNICODE_BYTES]. (выглядит некрасиво/подозрительно, но более сдержанно)

Это могло бы сработать, но, как вы сказали, мне нужно будет поддерживать сценарий. Если мне нужно поддерживать задачу и другой файл, я мог бы просто создать задачу, экспортировать XML и соответствующим образом развернуть его с помощью PS. Итак, это вариант. Однако мне интересно ваше решение Base64. Я предполагаю, что вы поместите содержимое сценария в блок сценария, а затем закодируете его?

RKillcrazy 21.08.2024 15:23

Думаю, у меня работает опция Base64. Я добавлю соответствующий сценарий и скриншоты вверху, если все будет работать так, как ожидалось.

RKillcrazy 21.08.2024 16:39

Другие вопросы по теме

Запланируйте задачу на второе воскресенье месяца или на третье и четвертое воскресенье и субботу
Используя Postgres/Flask, как я могу запросить следующее появление запланированной задачи, когда дни/часы/минуты хранятся как целые числа в своих собственных столбцах?
Автоматическое завершение обработки заказов WooCommerce с бронированиями, дата начала которых уже прошла
Как обеспечить выполнение хрон-задания точно на каждой возможной 5-минутной отметке (0:00, 0:05, 0:10) независимо от времени начала хрон-задания?
Запланированное задание Synology не выполняет простую команду с сообщением «нет такого файла»
Приложение имеет несколько экземпляров. Существует задание, которое будет выполняться в определенное время. как я могу заставить задание выполняться только одним экземпляром?
Spring загрузка аннотации @Async с @Scheduled
Расписание Java для периодического запуска против Thread.sleep
Автоматическое копирование новых файлов из одной папки в другую папку
Создайте в mybb задачу, чтобы автоматически пересчитывать и перестраивать форумы и темы каждую 1 минуту