Notificação por email quando o serviço automático não é iniciado (Windows Server 2012 R2)

2

Temos alguns servidores (Windows Server 2012 R2) em nosso ambiente que instalam atualizações automaticamente e reiniciam depois disso.

Após a reinicialização, gostaríamos de verificar o status de todos os serviços (Windows) definidos como início automático. Se um serviço não for iniciado, o script tentará iniciar o serviço 3 vezes e, se todas as tentativas falharem, deverá enviar uma notificação por email para que possamos verificar o que há de errado com esse serviço neste servidor.

Eu queria saber se já existia uma solução fácil, talvez um script do PowerShell?

    
por Peter 14.10.2015 / 14:08

4 respostas

0

Eu encontrei um script Powershell que é perfeito para mim, eu só preciso personalizar um pouco. Aqui está o link link (alemão, mas o script na parte inferior do a página é toda em inglês). No entanto, preciso de ajuda com essa parte (linhas 130 e seguintes):

foreach ($item in $report){
Write-Host "Starting Service " $item.Name " on server: " $item.Server -Foregroundcolor yellow
$start = Get-Date
$startSVCblock = {param($item) Start-Service -InputObject (Get-Service -ComputerName $item.Server -Name $item.Name)}
$j = Start-Job -ScriptBlock $startSVCblock -Arg $item
do {
    if ($j.State -ne 'Running') { break} 
    $j | Receive-Job
} while (((Get-Date) - $start) -le $timeout)

}

Eu vejo que esta é a parte em que o script inicia um serviço, mas não estou acostumado a empregos em Powershell. Como devo editar o script para que, ao iniciar o serviço, ele grave o nome do serviço em um arquivo de log? Talvez com try / catch?

Editar:

Se alguém se depara com isso e quer saber como eu resolvi isso: Depois de muita pesquisa, descobri que é extremamente difícil gravar a saída de Receive-Job em um arquivo de log. Por isso, escolhi uma abordagem diferente: verifiquei se o servidor está em execução após o término do trabalho. Aqui está o código:

foreach ($item in $report){
Write-Output "Starting Service " $item.Name " on server: " $item.Server
$start = Get-Date
$startSVCblock = {param($item) Start-Service -InputObject (Get-Service -ComputerName $item.Server -Name $item.Name)}
$j = Start-Job -ScriptBlock $startSVCblock -Arg $item
do {
    if ($j.State -ne 'Running') { break} 
    $j | Receive-Job
} while (((Get-Date) - $start) -le $timeout)
$newService = Get-Service -ComputerName $item.Server -Name $item.Name
if ($newService.Status -ne "Running") { LogWrite "$item could not start" }

}
    
por 21.10.2015 / 16:24
1

Eu aconselho você a procurar um NMS. Nós usamos o PRTG e funciona bem. Nele você pode criar sensores que monitoram os serviços do Windows usando o WMI. Você pode configurar o sensor para enviar scripts de mail / start se o serviço for desativado.

O PRTG é licenciado por sensores, mas a versão gratuita oferece 100, o que deve ser suficiente para alguns servidores (você precisa de um sensor por serviço para monitorar)

    
por 14.10.2015 / 14:42
1

O Powershell seria uma ótima maneira de monitorar esses serviços. Curiosamente, eu estava lendo um blog sobre isso hoje. Vou tentar ligar o script, se puder encontrá-lo, mas a essência geral seria:

1.) Encontre serviços que estão configurados para iniciar automaticamente.

2.) Verifique o estado do serviço.

O truque é que o

get-service

O cmdlet não produz nenhum tipo de 'StartupType', portanto, será necessário usar o objeto WMI Win32_Service.

Foreach($Server in $ServerList){
    Get-WmiObject -ComputerName $Server Win32_Service | 
    Where-Object {$_.StartMode -eq 'Auto' -AND $_.State -eq 'Stopped'}
}

Isso deve fornecer uma lista de serviços que se ajustem aos parâmetros desejados.

NOTAS Há algumas notas para isso:

1.) Eu recomendo que você tenha esse script iniciado alguns minutos depois que os servidores forem iniciados como $ _. StartMode -eq 'Auto' abrangerá os serviços configurados para iniciar imediatamente após a inicialização E aqueles configurados para iniciar automaticamente depois de um atraso.

2.) Haverá serviços que serão retornados através deste one-liner que você provavelmente não se importa com o monitoramento. (I.E. no meu laptop, um serviço chamado "TrustedInstaller" atende a esse critério e foi retornado como um serviço interrompido: /) Então, você provavelmente precisará filtrá-los também.

    
por 15.10.2015 / 05:58
1

Serviço > Propriedades > Recuperação

Pode selecionar o que fazer nas 3 primeiras falhas, incluindo reiniciar o serviço ou executar um comando.

Aqui também é possível usar Executar programa para definir o script que reiniciará o serviço, limpará um arquivo, enviará uma notificação etc. Tudo para o script do NMS (Zabbix) ou Powershell , mas a maior parte disso pode ser resolvida de forma nativa e o GPO (se aplicável ao seu ambiente) pode ter esse conjunto em todos os serviços / computadores necessários.

    
por 16.10.2015 / 19:00