|
<# :
|
|
@echo off
|
|
title Painel de Agendamentos - Hemovida
|
|
color 0F
|
|
:: Este bloco permite que o CMD rode comandos PowerShell nativos usando este mesmo arquivo
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Invoke-Expression (Get-Content '%~f0' -Raw)"
|
|
exit /b
|
|
#>
|
|
|
|
# ============================================================================
|
|
# CONFIGURA??ES INTOC?VEIS (Apontando para o seu .ps1 existente)
|
|
# ============================================================================
|
|
$PastaTrabalho = "C:\hemovida"
|
|
$ScriptPath = "$PastaTrabalho\Backup-Hemovida.ps1"
|
|
$ExecutavelPS = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
|
|
|
|
# ============================================================================
|
|
# FUN??ES DE LEITURA DO AGENDADOR DO WINDOWS
|
|
# ============================================================================
|
|
function Obter-HorarioFull {
|
|
$task = Get-ScheduledTask -TaskName "Hemovida_Backup_FULL" -ErrorAction SilentlyContinue
|
|
if ($task) {
|
|
$boundary = $task.Triggers[0].StartBoundary
|
|
if ($boundary -match "T(\d{2}:\d{2})") { return $matches[1] }
|
|
}
|
|
return "Nao configurado"
|
|
}
|
|
|
|
function Obter-HorariosDiff {
|
|
$task = Get-ScheduledTask -TaskName "Hemovida_Backup_DIFERENCIAL" -ErrorAction SilentlyContinue
|
|
$lista = @()
|
|
if ($task) {
|
|
foreach ($t in $task.Triggers) {
|
|
if ($t.StartBoundary -match "T(\d{2}:\d{2})") { $lista += $matches[1] }
|
|
}
|
|
}
|
|
if ($lista.Count -eq 0) { return "Nao configurado" }
|
|
return $lista -join ", "
|
|
}
|
|
|
|
# ============================================================================
|
|
# FUN??O DE CRIA??O E ATUALIZA??O NO WINDOWS
|
|
# ============================================================================
|
|
function Criar-Tarefas {
|
|
param($HoraFull, [string[]]$HorariosDiff)
|
|
|
|
Write-Host "`n[+] Limpando tarefas antigas no Windows..." -ForegroundColor Cyan
|
|
Unregister-ScheduledTask -TaskName "Hemovida_Backup_FULL" -Confirm:$false -ErrorAction SilentlyContinue
|
|
Unregister-ScheduledTask -TaskName "Hemovida_Backup_DIFERENCIAL" -Confirm:$false -ErrorAction SilentlyContinue
|
|
|
|
$Principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
|
|
|
|
# Registra o FULL apontando para o seu script intoc?vel
|
|
$AcaoFull = New-ScheduledTaskAction -Execute $ExecutavelPS -Argument "-ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File `"$ScriptPath`" -TipoBackup Full" -WorkingDirectory $PastaTrabalho
|
|
$GatilhoFull = New-ScheduledTaskTrigger -Daily -At $HoraFull
|
|
Register-ScheduledTask -TaskName "Hemovida_Backup_FULL" -Action $AcaoFull -Trigger $GatilhoFull -Principal $Principal -Description "Backup Completo (Full) - Hemovida" -Force | Out-Null
|
|
Write-Host "[+] Tarefa FULL registrada para as $HoraFull" -ForegroundColor Green
|
|
|
|
# Registra os DIFERENCIAIS apontando para o seu script intoc?vel
|
|
$AcaoDiff = New-ScheduledTaskAction -Execute $ExecutavelPS -Argument "-ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File `"$ScriptPath`" -TipoBackup Diff" -WorkingDirectory $PastaTrabalho
|
|
$Gatilhos = @()
|
|
foreach ($h in $HorariosDiff) {
|
|
$h = $h.Trim()
|
|
if ($h -match '^\d{2}:\d{2}$') {
|
|
$Gatilhos += New-ScheduledTaskTrigger -Daily -At $h
|
|
}
|
|
}
|
|
|
|
if ($Gatilhos.Count -gt 0) {
|
|
Register-ScheduledTask -TaskName "Hemovida_Backup_DIFERENCIAL" -Action $AcaoDiff -Trigger $Gatilhos -Principal $Principal -Description "Backups Parciais (Diff) - Hemovida" -Force | Out-Null
|
|
Write-Host "[+] Tarefas DIFERENCIAIS registradas com sucesso!" -ForegroundColor Green
|
|
}
|
|
}
|
|
|
|
# ============================================================================
|
|
# LOOP DO MENU INTERATIVO PARA OS OPERADORES
|
|
# ============================================================================
|
|
while ($true) {
|
|
Clear-Host
|
|
Write-Host "=====================================================" -ForegroundColor Cyan
|
|
Write-Host " PAINEL DE CONTROLE DE BACKUPS - HEMOVIDA " -ForegroundColor White
|
|
Write-Host "=====================================================" -ForegroundColor Cyan
|
|
|
|
$Full = Obter-HorarioFull
|
|
$Diff = Obter-HorariosDiff
|
|
|
|
Write-Host " ESTADO ATUAL NO AGENDADOR DO SERVIDOR:" -ForegroundColor Yellow
|
|
Write-Host " [FULL] Diario as......: $Full"
|
|
Write-Host " [DIFF] Diarios as.....: $Diff"
|
|
Write-Host "=====================================================" -ForegroundColor Cyan
|
|
Write-Host "[1] Restaurar grade PADRAO (Full: 00:30 | Diff: 10h, 12h, 14h, 16h, 18h)"
|
|
Write-Host "[2] Alterar horario do Backup FULL"
|
|
Write-Host "[3] Alterar horarios do Backup DIFERENCIAL"
|
|
Write-Host "[4] APAGAR AGENDAMENTOS (Pausar rotinas)"
|
|
Write-Host "[5] ABRIR MONITOR DE LOGS (Tempo Real)"
|
|
Write-Host "[0] Sair do Painel"
|
|
Write-Host "=====================================================" -ForegroundColor Cyan
|
|
|
|
$Opcao = Read-Host "Digite o numero da opcao desejada"
|
|
|
|
switch ($Opcao) {
|
|
"1" {
|
|
Criar-Tarefas -HoraFull "00:30" -HorariosDiff @("10:00", "12:00", "14:00", "16:00", "18:00")
|
|
Write-Host "`nGrade padrao restaurada no sistema com sucesso!" -ForegroundColor Green
|
|
Pause
|
|
}
|
|
"2" {
|
|
$NovoFull = Read-Host "`nDigite o novo horario para o Backup FULL (ex: 01:30)"
|
|
if ($NovoFull -match '^\d{2}:\d{2}$') {
|
|
$DiffAtual = (Obter-HorariosDiff) -split ","
|
|
Criar-Tarefas -HoraFull $NovoFull -HorariosDiff $DiffAtual
|
|
Write-Host "`nHorario do FULL atualizado no Windows!" -ForegroundColor Green
|
|
} else {
|
|
Write-Host "`nFormato invalido! Use o formato HH:mm (ex: 22:00)" -ForegroundColor Red
|
|
}
|
|
Pause
|
|
}
|
|
"3" {
|
|
$NovosDiffs = Read-Host "`nDigite os horarios DIFERENCIAIS separados por virgula (ex: 09:00, 13:00, 18:30)"
|
|
$ArrayDiffs = $NovosDiffs -split ","
|
|
$FullAtual = Obter-HorarioFull
|
|
if ($FullAtual -eq "Nao configurado") { $FullAtual = "00:30" }
|
|
|
|
Criar-Tarefas -HoraFull $FullAtual -HorariosDiff $ArrayDiffs
|
|
Write-Host "`nHorarios Diferenciais atualizados no Windows!" -ForegroundColor Green
|
|
Pause
|
|
}
|
|
"4" {
|
|
$Confirma = Read-Host "`nTem certeza que deseja apagar os agendamentos do Windows? (S/N)"
|
|
if ($Confirma -match "^[Ss]") {
|
|
Unregister-ScheduledTask -TaskName "Hemovida_Backup_FULL" -Confirm:$false -ErrorAction SilentlyContinue
|
|
Unregister-ScheduledTask -TaskName "Hemovida_Backup_DIFERENCIAL" -Confirm:$false -ErrorAction SilentlyContinue
|
|
Write-Host "`nTodas as tarefas de backup foram REMOVIDAS do Agendador!" -ForegroundColor Yellow
|
|
}
|
|
Pause
|
|
}
|
|
"5" {
|
|
# Executa a sua rotina de monitoramento intacta abrindo uma nova janela
|
|
$ComandoMonitor = "Get-ScheduledTask -TaskName 'Hemovida_Backup_*' | Select-Object TaskName, State; Write-Host '--- HORARIOS FULL ---' -ForegroundColor Cyan; (Get-ScheduledTask -TaskName 'Hemovida_Backup_FULL').Triggers | Select-Object StartBoundary, DaysInterval; Write-Host '--- HORARIOS DIFF ---' -ForegroundColor Cyan; (Get-ScheduledTask -TaskName 'Hemovida_Backup_DIFERENCIAL').Triggers | Select-Object StartBoundary; Write-Host '--- LENDO LOG ---' -ForegroundColor Green; `$Log = 'C:\Backup_Hemovida\Logs\Log_Backups_' + (Get-Date -Format 'yyyy-MM') + '.txt'; if (Test-Path `$Log) { Get-Content `$Log -Wait -Tail 20 } else { Write-Host '[AVISO] O log ainda nao existe na unidade C:. Ele aparecera aqui assim que o primeiro backup rodar!' -ForegroundColor Yellow }"
|
|
Start-Process powershell.exe -ArgumentList "-NoExit -NoProfile -ExecutionPolicy Bypass -WindowStyle Maximized -Command `"$ComandoMonitor`""
|
|
Write-Host "`nNova janela de monitoramento aberta com sucesso!" -ForegroundColor Green
|
|
Start-Sleep -Seconds 2
|
|
}
|
|
"0" {
|
|
Exit
|
|
}
|
|
default {
|
|
Write-Host "`nOpcao invalida. Tente novamente." -ForegroundColor Red
|
|
Start-Sleep -Seconds 2
|
|
}
|
|
}
|
|
}
|