Problema

Você já deve está se perguntando, “O windows já faz isso, para que você precisa de script?”, a história é o seguinte, tenho um serviço que faz conexão com o banco de dados do sistema Contmatic Phenix, que anda me dando trabalho, quando o servidor é iniciado ou ele tem algum tipo de queda brusca esse serviço não sobe, por mais que ele esteja para ser incializado automaticamente, como você pode vê na imagem à baixo:

Já tentei contato com o Suporte, porém ninguém consegue me dar uma solução para esse tipo de problema inclusive eu até já instalei do zero o Windows e o Sistema Phenix. E sem contar que o suporte deles é nota 10 (Ironia)

Até aqui parece um problema fácil de se resolver. Vou colocar um script para reiniciar o serviço à cada uma hora. Não.

Não posso fazer isso, por um motivo bem especifio, se essa conexão com o banco de dados for encerrada sem planejamento, os arquivos aberto vão se corromper, e adivinhem? Mais trabalho para o Andrey.

Solução

A solução que encontrei, foi verificar se o status do serviço está como Running, Stoped ou Paused, e fazer validações com o script para que de acordo com o seu status ele tome a ação necessária para que o funcionamento do serviço não pare.

Tranquilo, tudo que eu tive que fazer foi uma checagem para pegar o status do serviço:

Get-Service -Name TapiSrv | %{$_.Status}

A saída deve ser o status do serviço, no meu caso ele está parado no momento então meu resultado foi:

Stopped

Agora começa a brincadeira, dependendo do status do serviço, eu faço uma ação, com no meu caso o serviço está parado, a ação será a seguinte:

PS C:\Users\andrey\Dropbox\Developer\Desenvolvendo\Testing> .\Restart__Stoped_Service.ps1
O serviço está parado, vou precisar iniciar ele novamente, aguarde...
Opa, Serviço inciado, vou mandar um email para o [email protected] para confirmar!

Se o serviço estiver com o status de Running:

PS C:\Users\andrey\Dropbox\Developer\Desenvolvendo\Testing> .\Restart__Stoped_Service.ps1
Serviço já está em execução não é necessário tomar nenhuma ação aqui!

Bom se você ficou curioso, o meu IF está da seguinte maneira:

Function Verifica__Servico {
  $Nome__Servico = "TapiSrv"
  $data = Get-Date -format "dd-MM-yyyy-hh-mm-ss"
  $Get__Service = Get-Service -Name $Nome__Servico | %{$_.Status}
  if ($Get__Service -eq "Running"){
    echo "Serviço já está em execução não é necessário tomar nenhuma ação aqui!"
  } elseif ($Get__Service -eq "Stopped"){
    echo "O serviço está parado, vou precisar iniciar ele novamente, aguarde..."
    Start-Service $Nome__Servico
    echo "Opa, Serviço inciado, vou mandar um email para o [email protected] para confirmar!"
  } elseif ($Get__Service -eq "Paused"){
    echo "Algum infeliz, pausou o serviço, vou iniciar ele, espera aí..."
    Start-Service $Nome__Servico
    echo "Opa, Serviço inciado, vou mandar um email para o [email protected] para confirmar!"
  } else {
    echo "Um erro desconhecido, vindo da Galáxia aconteceu, da uma olhada no script!"
  }
}
Verifica__Servico

Download

Você pode fazer download do script no meu GitHub clicando AQUI, espero ter ajudado alguém!

Caso tenha alguma dúvida, fique à vontade em comentar.

\abraço