Monitore e Automatize Serviços do Windows com PowerShell
Fala pessoal, tudo bem com vocês?
Já aconteceu de um serviço crítico parar de funcionar e você descobrir tarde demais?
Neste post, vou te mostrar como monitorar serviços do Windows automaticamente usando PowerShell, gerar relatórios diários e até reiniciar serviços parados — tudo de forma simples, prática e segura.
O que você vai aprender
Monitorar serviços essenciais (IIS, SQL Server, Exchange, etc.).
Reiniciar serviços automaticamente se eles estiverem parados.
Gerar relatórios HTML de status para auditoria.
Automatizar a execução diária com Task Scheduler.
<#
.DESCRIPTION
Monitora serviços do Windows, reinicia se estiverem parados e gera relatório HTML.
.AUTHOR
Paulo Costa
.VERSION
1.0
#>
param(
[String[]]$servicos = @("Spooler", "wuauserv", "BITS"), # Serviços para monitorar, adicione ou remova conforme necessário
[String]$ReportFolder = "C:\ServiceReports\" # Pasta onde o relatório será salvo
)
if (-not (Test-Path $ReportFolder)) { New-Item -ItemType Directory -Path $ReportFolder -Force | Out-Null }
$ReportFile = Join-Path $ReportFolder ("ServiceReport_" + (Get-Date -Format "yyyyMMdd_HHmmss") + ".html")
$ReportData = @()
foreach ($svc in $servicos) {
try {
$servico = Get-Service -Name $svc -ErrorAction Stop
$statusBefore = $servico.Status
if ($servico.Status -ne "Running") {
Start-Service -Name $svc -ErrorAction SilentlyContinue
Start-Sleep -Seconds 3
$servico.Refresh()
}
$ReportData += [PSCustomObject]@{
Serviço = $svc
StatusAnterior = $statusBefore
StatusDepois = $servico.Status
Data = Get-Date
}
} catch {
$ReportData += [PSCustomObject]@{
Serviço = $svc
StatusAnterior = "Erro"
StatusDepois = "Erro"
Data = Get-Date
}
}
}
$Html = $ReportData | Sort-Object Serviço | ConvertTo-Html `
-Title "Relatório de Serviços - $env:COMPUTERNAME" `
-PreContent "Relatório de Serviços do Windows - $env:COMPUTERNAME
Gerado em: $(Get-Date)
" `
-PostContent "Script desenvolvido por Paulo Costa
"
$Html | Out-File -FilePath $ReportFile -Encoding UTF8
Write-Host "Relatório gerado: $ReportFile" -ForegroundColor Green
Automatizando a execução
Para rodar diariamente sem intervenção:
Abra Task Scheduler.
Crie Basic Task → Nome: Monitorar Serviços.
Trigger: Daily → Hora desejada.
Action: Start a Program →
powershell.exeAdd arguments:
-File "C:\temp\Services.ps1"
Salve e teste.
Agora você terá relatórios diários automáticos e os serviços sempre monitorados.