2015-10-22

Перезапуск scheduled tasks на powershell

Скрипт, который для Windows Server 2003 (в котором нет Get-ScheduledTask):
1. Останавливает запущенные задания
2. Переносит логи рекурсивно не сохраняя структуры директорий
3. Запускает остановленные задания
Bat файл для запуска

@ECHO OFF
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '%~dpn0.ps1'"
PAUSE

Скрипт Powershell

$Source = "C:\Work\bat\source"
$Target = "C:\Work\bat\target"

Write-Host "Stoping tasks"

$scheduledTasks = schtasks /query /fo csv | ConvertFrom-Csv
$runningTasks =@()

foreach($task in $scheduledTasks) 
    {
 if ($task.Status -eq 'Running' -and $task.taskName -eq 'testTask') {
  $runningTasks += $task.taskName
  Write-Host $task.taskName " will be stopped"
  schtasks /END /TN $task.taskName
  }
 }

Write-Host "Moving files from $Source to $Target"
Get-Childitem $Source -recurse -include *.txt | Move-Item -destination $Target -force 

Write-Host "Starting Tasks"
if ($runningTasks.count -gt 0) {
 foreach($runningTask in $runningTasks)
   {
   Write-Host "$runningTask starting"
   schtasks /RUN /TN $runningTask  
   }

 }