Advertisement
Guest User

Desliga_PC by SS

a guest
May 14th, 2025
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.64 KB | Software | 0 0
  1. # Desliga_PC.ps1
  2.  
  3. Clear-Host
  4.  
  5. function Obter-HorarioDesligamento {
  6. param (
  7. [string]$entrada
  8. )
  9.  
  10. $dataAtual = Get-Date
  11.  
  12. if ($entrada -match '^\d{1,2}:\d{2}h$') {
  13. $tempoStr = $entrada.TrimEnd('h')
  14. $partes = $tempoStr.Split(':')
  15. $horas = [int]$partes[0]
  16. $minutos = [int]$partes[1]
  17. return $dataAtual.AddHours($horas).AddMinutes($minutos)
  18. }
  19. elseif ($entrada -match '^\d{1,2}h$') {
  20. $horas = [int]$entrada.TrimEnd('h')
  21. return $dataAtual.AddHours($horas)
  22. }
  23. elseif ($entrada -match '^\d{1,2}:\d{2}$') {
  24. $partes = $entrada.Split(':')
  25. $hora = [int]$partes[0]
  26. $minuto = [int]$partes[1]
  27.  
  28. if ($hora -ge 24 -or $minuto -ge 60) {
  29. return $null
  30. }
  31.  
  32. $dataAlvo = Get-Date -Hour $hora -Minute $minuto -Second 0
  33.  
  34. if ($dataAlvo -lt $dataAtual) {
  35. $dataAlvo = $dataAlvo.AddDays(1)
  36. }
  37. return $dataAlvo
  38. }
  39. else {
  40. return $null
  41. }
  42. }
  43.  
  44. function Agendar-Desligamento {
  45. param (
  46. [datetime]$dataHora
  47. )
  48.  
  49. $taskName = "Desliga_PC"
  50.  
  51. if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) {
  52. Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
  53. }
  54.  
  55. $action = New-ScheduledTaskAction -Execute "shutdown.exe" -Argument "/s /t 0"
  56. $trigger = New-ScheduledTaskTrigger -Once -At $dataHora
  57.  
  58. Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -User "$env:USERNAME" -RunLevel Highest -Force
  59.  
  60. Write-Host "`Desligamento agendado com sucesso!" -ForegroundColor Green
  61. Write-Host "Data: $($dataHora.ToString("dd/MM/yyyy"))"
  62. Write-Host "Hora: $($dataHora.ToString("HH:mm"))"
  63. #Write-Host "`Para cancelar, execute:" -ForegroundColor Yellow
  64. #Write-Host "`nUnregister-ScheduledTask -TaskName 'Desliga_PC' -Confirm:`$false`n" -ForegroundColor Yellow
  65. Pause
  66. }
  67.  
  68. # --- Execução Principal ---
  69.  
  70. Write-Host "====== AGENDADOR DE DESLIGAMENTO ======" -ForegroundColor Cyan
  71. Write-Host "Informe o horário ou tempo restante para desligar o PC:"
  72. Write-Host "- Ex: 23:45 → horário exato"
  73. Write-Host "- Ex: 2h → daqui 2 horas"
  74. Write-Host "- Ex: 1:30h → daqui 1 hora e 30 minutos"
  75. Write-Host "- Digite 'cancelar' para remover tarefa já existente"
  76. Write-Host "----------------------------------------"
  77.  
  78. do {
  79. $entrada = Read-Host "Digite o horário, duração ou 'cancelar'"
  80.  
  81. if ($entrada.Trim().ToLower() -eq "cancelar") {
  82. if (Get-ScheduledTask -TaskName "Desliga_PC" -ErrorAction SilentlyContinue) {
  83. Unregister-ScheduledTask -TaskName "Desliga_PC" -Confirm:$false
  84. Write-Host "`Tarefa 'Desliga_PC' cancelada com sucesso!" -ForegroundColor Green
  85. } else {
  86. Write-Host "`Nenhuma tarefa 'Desliga_PC' encontrada para cancelar." -ForegroundColor Yellow
  87. }
  88. Pause
  89. exit
  90. }
  91.  
  92. $dataHoraDesligamento = Obter-HorarioDesligamento -entrada $entrada
  93.  
  94. if (-not $dataHoraDesligamento) {
  95. Write-Host "Entrada inválida. Tente novamente." -ForegroundColor Red
  96. }
  97. } until ($dataHoraDesligamento)
  98.  
  99. # Confirmação do usuário
  100. $dataFormatada = $dataHoraDesligamento.ToString("dd/MM/yyyy")
  101. $horaFormatada = $dataHoraDesligamento.ToString("HH:mm")
  102.  
  103. Write-Host "`O PC será desligado em: $dataFormatada às $horaFormatada"
  104. $confirmacao = Read-Host "Deseja agendar essa tarefa? (S/N)"
  105.  
  106. if ($confirmacao -match '^[sS]$') {
  107. Agendar-Desligamento -dataHora $dataHoraDesligamento
  108. } else {
  109. Write-Host "`Agendamento cancelado." -ForegroundColor DarkYellow
  110. Pause
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement