Estendendo a abordagem de Ryan usando 2 tarefas, uma acionada por "Power Gone" e uma tarefa de botão "abortar", acionada por um evento "Power Restore"
Caso você precise fazer algo mais genérico (nem todos os executáveis têm um interruptor de aborto como shutdown
), e deseja manter um buffer de alguns minutos antes de começar a enviar e-mails para o gerenciamento, limpar discos ou autodestruir o datacenter (ou qualquer outra coisa que você queira automatizar em uma emergência), você pode fazer com que o primeiro pare / espere um pouco, e faça com que a segunda tarefa pare a primeira se acionada:
Tarefa do PowerGone:
Send-MailMessage -To "[email protected]" -Body "Self-destruction sequence initiated, T-10m"
# We can still abort this task
Start-Sleep -Seconds 600
Send-MailMessage -To "[email protected]" -Subject "Notice of termination..."
Start-Implosion -Force
Tarefa do PowerBack:
$TaskScheduler = New-Object -ComObject Schedule.Service
$TaskScheduler.Connect("localhost")
$TargetTask = $TaskScheduler.GetFolder('\').GetTask('PowerGone')
$TargetTask.Stop()