Создание запланированной задачи через PowerShell, которая запускается один раз под текущим пользователем и затем автоматически удаляется
В современном администрировании Windows часто требуется автоматизировать выполнение определённых действий. Один из эффективных способов – создание запланированных задач (Scheduled Tasks), которые выполняются по расписанию или при определённых условиях. В данной статье мы рассмотрим, как с помощью PowerShell создать запланированную задачу, которая запустится один раз от имени текущего пользователя, а после выполнения удалится автоматически.
Зачем создавать однократную запланированную задачу с автоматическим удалением
Однократные задачи полезны для разовых операций — установки программ, запуска обновлений, выполнения скриптов или иных действий, которые не требуют повторного запуска. Автоматическое удаление задачи после исполнения помогает избежать «загрязнения» списка запланированных задач и упрощает управление системой.
Основные параметры создания задачи через PowerShell
Для создания и управления запланированными задачами в Windows можно использовать модуль ScheduledTasks, который встроен в PowerShell. Основные параметры, которые нам понадобятся:
- Action — действие, которое должна выполнить задача (например, запуск PowerShell скрипта).
- Trigger — момент запуска задачи (для однократного запуска — точное время).
- Principal — указывает пользователя, от имени которого должна выполняться задача (в нашем случае – текущий пользователь).
- Settings — настройки поведения задачи, в том числе удаление после запуска.
Пример скрипта PowerShell для создания такой задачи
powershell
Имя задачи
$taskName = "OneTimeSelfDeletingTask"
Определяем время запуска: например, через 1 минуту от текущего момента
$runTime = (Get-Date).AddMinutes(1)
Действие: запуск PowerShell с нужным скриптом или командой
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -WindowStyle Hidden -File C:\Path\to\your\script.ps1"
Триггер однократного запуска
$trigger = New-ScheduledTaskTrigger -Once -At $runTime
Указываем текущего пользователя
$currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$principal = New-ScheduledTaskPrincipal -UserId $currentUser -LogonType Interactive
Настройки задачи: после выполнения удаляем задачу
$settings = New-ScheduledTaskSettingsSet -DeleteExpiredTaskAfter (New-TimeSpan -Minutes 5) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Создаём объект задачи
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings
Регистрируем задачу в планировщике
Register-ScheduledTask -TaskName $taskName -InputObject $task
В этом примере:
- Задача запускается через одну минуту.
- Задача выполняется под текущим пользователем.
- После выполнения задача будет удалена автоматически через 5 минут благодаря параметру
-DeleteExpiredTaskAfter
.
Как гарантировать, что задача удалится сразу после выполнения
Параметр -DeleteExpiredTaskAfter
задаёт время, через которое задача будет удалена, если больше не активна. Однако, чтобы гарантировать немедленное удаление, можно добавить в сам скрипт, который запускается задачей, команду для удаления задачи.
Например, в скрипте script.ps1
добавить:
powershell
$taskName = "OneTimeSelfDeletingTask"
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
Это приведёт к тому, что после выполнения основного кода скрипта задача будет удалена.
Вывод
Создать однократную запланированную задачу, которая работает под текущим пользователем и удаляется после выполнения, достаточно просто с помощью PowerShell. Такой подход помогает автоматизировать однократные операции без дополнительного ручного вмешательства и поддерживать порядок в системе. Используйте приведённый пример в своих скриптах, чтобы эффективно управлять задачами в Windows.