Encerre o PC em um determinado momento

1

Eu tenho um software (calibre ebook manager) que busca notícias às 6 da manhã. Eu quero fazer o seguinte:

  1. Desperte o computador às 5:50 se ainda não estiver ligado. (facilmente feito no BIOS)
  2. Um agendador abre o calibre às 5:55 (concluído)
  3. O Caliber busca as notícias conforme elas são iniciadas.

Os passos acima foram fáceis de realizar, mas existem alguns problemas. Eu quero desligar o pc SE E SOMENTE SE foi iniciado às 5:50 automaticamente. Se, por algum motivo, o pc já estiver ligado, NÃO QUERO desligá-lo.

Como isso deve ser feito?

    
por harveyslash 04.12.2014 / 09:45

4 respostas

2

Aqui está o AutoHotKey Script que faz isso. Certifique-se de executar este script na inicialização. (Adicione um atalho na pasta de inicialização)

;
; AutoHotkey Version: 1.x
; Language:       English
; Platform:       Win9x/NT
; Author:         AEonAX
;
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
if (A_Hour=5 and A_Min>55 and A_Min<59) ;Check if script starting time between 05:55 and 05:59 (24Hr clock)
{
Sleep,1000*60*5     ;Waits 5 Minutes
msgbox,4,,Will Shutdown in 60 seconds. Do you want to Stop the Shutdown.,60 ;Shows a msgbox for 60 seconds, If no response then shutsdown
ifmsgbox,Yes
    MsgBox Shutdown Cancelled
else
    Shutdown,1
}
    
por 04.12.2014 / 10:49
3

Como a condição é redefinir somente se o computador foi inicializado automaticamente às 5:50, acho que uma maneira seria depender do tempo de inicialização . Você pode ajustar o contador de minutos para detectar se, quando o BIOS iniciar o computador, às 5:50, o tempo de inicialização é visto pelo sistema. Mas isso é um detalhe.

Para o desligamento e detecção de um tempo de inicialização, você pode usar o seguinte script PowerShell:

# GETTING BOOT TIME
$last_boot_date_time = Get-WmiObject win32_operatingsystem | select @{LABEL='LastBootUpTime';EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}

# SELECTING HOUR:MINUTES:SECONDS PART OF THE DATE
$last_boot_time_only = $last_boot_date_time | foreach { ([String]$_).split(" ")[1] }

# CHECKING IF BOOT TIME EQUALS 05:50
# IF SO - INITIATE SHUTDOWN
if ( $last_boot_time_only.split(":")[0] -eq "05" -and $last_boot_time_only.split(":")[1] -eq "50")
{ 
    Write-host "Shutting down in 10 seconds."; 
    shutdown -s -f -t 10
}

Isso presume que você esteja usando o Windows com a versão 1 ou 2 do PowerShell. Se você tiver uma versão superior do PowerShell, talvez queira substituir o comando que obtém o tempo de inicialização com Get-CimInstance -ClassName win32_operatingsystem | select lastbootuptime

    
por 04.12.2014 / 10:40
0

Experimente o script em lote abaixo, pois ele depende do tempo de atividade do sistema. Execute isto quando achar apropriado, com o Scheduler

@echo off
setlocal enabledelayedexpansion

for /f "tokens=2 delims=," %%a in ('systeminfo ^| findstr Boot ^| findstr System') do (
  set output=%%a
  set /a hrs=!output:~1,1!
  set mins=!output:~3,2!
 ::echo !output!
 ::echo !hrs! 
 ::echo !mins!
if !hrs! == 5 (
    if !mins! == 50 (
        shutdown -s -f -t 100
    )
) 

)

Bem, essa é a ideia, ajustar conforme necessário

Explicação.

  1. Extraia a hora em que o computador foi ligado,

systeminfo ^| findstr Boot ^| findstr System

systeminfo tem muita informação aí, então estamos filtrando apenas o parâmetro que precisamos que estamos procurando. por exemplo,

C:\Users>systeminfo | findstr Boot |findstr System

System BootTime: 12/4/2014, 7:20:37 AM

  1. Selecione o campo de hora apenas separado pela vírgula

for /f "tokens=2 delims=," %%a in ('systeminfo ^| findstr Boot ^| findstr System') do ( set output=%%a

e nessa cadeia inteira apenas selecione o primeiro caractere (1 espaço), o terceiro e o quarto caractere (2 espaços)

set /a hrs=!output:~1,1! set mins=!output:~3,2!

Para dar apenas a hora e o minuto

  1. SE função para desligar se a hora coincidir.

if !hrs! == 5 (

  if !mins! == 50 (

      shutdown -s -f -t 100

PS: O abaixo é o comentário para ver, se houver algum erro no código,

::echo !output!

::echo !hrs!

::echo !mins!

    
por 04.12.2014 / 10:55
-1

tente o nncron para Windows link Versão em inglês

    
por 04.12.2014 / 09:50