Arquivo de Windows Server - Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT https://paulocostati.com.br/windows-server/ Tue, 30 Sep 2025 11:43:47 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.9.1 https://i0.wp.com/paulocostati.com.br/wp-content/uploads/2024/09/Logotipo-empresa-de-programacao-sistemas-e-tecnologia.png?fit=32%2C32&ssl=1 Arquivo de Windows Server - Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT https://paulocostati.com.br/windows-server/ 32 32 209994073 Monitore Logon e Logoff no Windows com PowerShell – Versão Melhorada https://paulocostati.com.br/microsoft/monitore-logon-e-logoff-no-windows-com-powershell-versao-melhorada/?utm_source=rss&utm_medium=rss&utm_campaign=monitore-logon-e-logoff-no-windows-com-powershell-versao-melhorada Tue, 30 Sep 2025 11:39:57 +0000 https://paulocostati.com.br/?p=255 Fala pessoal, tudo bem com vocês? No post anterior eu mostrei como usar PowerShell para monitorar e automatizar serviços do […]

O post Monitore Logon e Logoff no Windows com PowerShell – Versão Melhorada apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>

Fala pessoal, tudo bem com vocês?

No post anterior eu mostrei como usar PowerShell para monitorar e automatizar serviços do Windows.

Agora eu trago uma versão melhorada e mais completa, voltada para quem precisa auditar logons e logoffs de usuários, seja em servidores ou estações de trabalho.


O que essa versão traz de novo

Com esse script você vai conseguir:

  • Coletar eventos de Logon (4624), Logoff (4634) e Logoff de usuário (4647).
  • Definir a quantidade de dias que deseja analisar.
  • Gerar relatórios em dois formatos:
    • CSV – perfeito para Excel ou Power BI.
    • HTML – visual limpo e pronto para abrir no navegador.
  • Obter informações importantes como:
    • Data do evento
    • Usuário
    • Tipo de logon
    • Máquina de origem

Tudo isso de forma automatizada, com mensagens claras durante a execução.


Requisitos

Antes de rodar, verifique:

  • PowerShell 5 ou superior (já vem no Windows 10/11 e Windows Server 2016+).
  • Executar como Administrador (o log de segurança exige permissão elevada).

Como usar

  1. Copie o script abaixo e salve como, por exemplo: C:\\Scripts\\Relatorio-LogonLogoff.ps1
  2. Abra o PowerShell como Administrador.
  3. Execute: .\\Relatorio-LogonLogoff.ps1
  4. Informe o número de dias de eventos que deseja coletar.
  5. O script cria a pasta: C:\\Temp\\LogonLogoff E salva lá os relatórios:
    • Relatorio-Logonlogoff.csv
    • Relatorio-Logonlogoff.html

Script

Write-Host "Iniciando coleta de eventos de Logon/Logoff..." -ForegroundColor Cyan

try {
    [int]$Dias = Read-Host "Quantos dias de eventos você deseja coletar?"
}
catch {
    Write-Host "Entrada inválida. Por favor, insira um número inteiro (ex: 10)." -ForegroundColor Red
    return
}

$OutputFolder = "C:\\Temp\\LogonLogoff"
$OutputCsv = "$OutputFolder\\Relatorio-Logonlogoff.csv"
$OutputHtml = "$OutputFolder\\Relatorio-Logonlogoff.html"

$ReportDate = Get-Date -Format "dd/MM/yyyy HH:mm:ss"
$ComputerName = $env:COMPUTERNAME
$ReportCreator = $env:USERNAME

Write-Host "Verificando/Criando o diretório de saída: $OutputFolder" -ForegroundColor Blue
if (-not (Test-Path $OutputFolder)) {
    try {
        New-Item -Path $OutputFolder -ItemType Directory -Force | Out-Null
        Write-Host "Diretório '$OutputFolder' criado com sucesso!" -ForegroundColor Green
    }
    catch {
        Write-Host "Erro ao criar o diretório. Por favor, verifique suas permissões." -ForegroundColor Red
        return
    }
}

Write-Host "Buscando eventos dos últimos '$Dias' dias..." -ForegroundColor Blue
Write-Progress -Activity "Coletando eventos..." -Status "Isso pode levar alguns minutos..." -PercentComplete 10

try {
    $Events = Get-WinEvent -FilterHashtable @{
        LogName   = 'Security'
        Id        = 4624, 4634, 4647
        StartTime = (Get-Date).AddDays(-$Dias)
    } | Select-Object @{Name='Data do Evento'; Expression={$_.TimeCreated}},
        Id,
        @{Name='Usuário'; Expression={$_.Properties[5].Value}},
        @{Name='Tipo de Logon'; Expression={
            switch ($_.Properties[8].Value) {
                2 { "Interativo (Local)" }
                3 { "Rede" }
                4 { "Batch" }
                5 { "Serviço" }
                7 { "Desbloquear (Tela)" }
                10 { "RemoteInteractive (RDP/Terminal)" }
                default { "Outros" }
            }
        }},
        @{Name='Máquina de Origem'; Expression={$_.Properties[11].Value}}

    Write-Progress -Activity "Coletando eventos..." -Status "Coleta concluída. Salvando relatórios..." -PercentComplete 50

    $Events | Export-Csv -Path $OutputCsv -NoTypeInformation -Delimiter ';'
    Write-Host "Relatório CSV salvo em: $OutputCsv" -ForegroundColor Green

    $HtmlHeader = @"
<head>
    <title>Relatório de Logon/Logoff dos últimos $Dias dias</title>
    <style>
        body { font-family: Arial, sans-serif; background-color: #f4f4f4; color: #333; margin: 20px; }
        h1 { color: #0056b3; text-align: center; }
        .header-info { text-align: center; margin-bottom: 20px; }
        .header-info p { margin: 5px 0; font-size: 14px; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { padding: 12px 15px; text-align: left; border-bottom: 1px solid #ddd; }
        th { background-color: #007bff; color: white; }
        tr:nth-child(even) { background-color: #f9f9f9; }
        tr:hover { background-color: #f1f1f1; }
    </style>
</head>
"@
    $HtmlBody = @"
<body>
    <div class="header-info">
        <h1>Relatório de Logon/Logoff dos últimos $Dias dias</h1>
        <p><strong>Relatório Gerado em:</strong> $ReportDate</p>
        <p><strong>Computador:</strong> $ComputerName</p>
        <p><strong>Criado por:</strong> $ReportCreator</p>
    </div>
"@

    $EventsHtmlTable = $Events | ConvertTo-Html -As Table -Fragment
    $HtmlContent = "<html>" + $HtmlHeader + $HtmlBody + $EventsHtmlTable + "</body></html>"
    $HtmlContent | Out-File -FilePath $OutputHtml -Encoding UTF8

    Write-Host "Relatório HTML salvo em: $OutputHtml" -ForegroundColor Green
    Write-Progress -Activity "Coletando eventos..." -Status "Relatórios prontos!" -PercentComplete 100
    Start-Sleep -Seconds 2
}
catch {
    Write-Host "Ocorreu um erro ao coletar os eventos. Verifique se o script está rodando como Administrador e se você tem eventos de segurança disponíveis." -ForegroundColor Red
}


Resultado

O relatório em HTML final traz uma tabela bem organizada com todos os eventos coletados, pronta para:

  • consulta rápida,
  • envio em relatórios internos,
  • ou até integração em um processo de auditoria.

Conclusão

Esse script deixa o processo de auditoria de logon/logoff muito mais simples e visual.

Se você já faz esse tipo de análise no dia a dia, pode usar essa versão como base e adaptá-la conforme a sua necessidade.

E aí, o que vocês acharam dessa versão melhorada?

Deixem nos comentários como vocês fazem o monitoramento de logon/logoff no ambiente de vocês!

O post Monitore Logon e Logoff no Windows com PowerShell – Versão Melhorada apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>
255
Cansado de tarefas manuais? Automatize tudo no Windows Server com PowerShell! https://paulocostati.com.br/windows-server/cansado-de-tarefas-manuais-automatize-tudo-no-windows-server-com-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=cansado-de-tarefas-manuais-automatize-tudo-no-windows-server-com-powershell Sat, 20 Sep 2025 09:00:00 +0000 https://paulocostati.com.br/?p=250 Cansado de tarefas manuais? Automatize tudo no Windows Server com PowerShell! Fala, pessoal, tudo bem com vocês? Se você trabalha […]

O post Cansado de tarefas manuais? Automatize tudo no Windows Server com PowerShell! apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>

Cansado de tarefas manuais? Automatize tudo no Windows Server com PowerShell!

Fala, pessoal, tudo bem com vocês?

Se você trabalha com administração de servidores, sabe que a rotina pode ser exaustiva. Gerenciar serviços, criar usuários, fazer backups… é um trabalho manual e que consome um tempo enorme. A boa notícia é que o PowerShell chegou para transformar essa rotina! Com ele, você automatiza tarefas repetitivas, economiza tempo e minimiza erros, podendo focar em coisas mais importantes.

Neste post, vou mostrar como automatizar as tarefas mais comuns para você dizer adeus ao trabalho manual.

Gerenciamento de Serviços: Fique no controle!

Manter os serviços essenciais do Windows Server funcionando é fundamental. O PowerShell permite que você gerencie esses serviços facilmente, seja para iniciar, parar ou apenas verificar o status.

  • Verificar o Status: Use Get-Service para ver o status de todos os serviços no servidor. Se quiser checar um específico, como o Windows Update, use Get-Service -Name wuauserv

  • Iniciar ou Parar: Para iniciar ou parar um serviço, os cmdlets são Start-Service e Stop-Service. Por exemplo, para iniciar o Windows Update, o comando é Start-Service -Name wuauserv.

    Para pará-lo, use Stop-Service -Name wuauserv

Scripts que trabalham para você

A cereja do bolo é criar um script que verifica se um serviço está parado e, se estiver, o inicia automaticamente. Isso garante a alta disponibilidade de serviços críticos.

				
					$servico = Get-Service -Name wuauserv
if ($servico.Status -eq 'Stopped') {
    Start-Service -Name wuauserv
    Write-Host "Serviço Windows Update iniciado."
} else {
    Write-Host "O serviço já está em execução."
}
				
			

Onde aplicar essa automação?

Essa automação é super útil para:

  • Garantir que serviços críticos como o SQL Server ou o Exchange estejam sempre em execução.

  • Automatizar a inicialização de serviços após uma reinicialização do servidor.

  • Monitorar e manter a saúde do seu ambiente sem precisar entrar no servidor a todo momento.

O post Cansado de tarefas manuais? Automatize tudo no Windows Server com PowerShell! apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>
250
Monitore e Automatize Serviços do Windows com PowerShell https://paulocostati.com.br/windows-server/monitore-e-automatize-servicos-do-windows-com-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=monitore-e-automatize-servicos-do-windows-com-powershell Tue, 16 Sep 2025 23:00:23 +0000 https://paulocostati.com.br/?p=237 Monitore e Automatize Serviços do Windows com PowerShell Fala pessoal, tudo bem com vocês? Já aconteceu de um serviço crítico […]

O post Monitore e Automatize Serviços do Windows com PowerShell apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>

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 "<h2>Relatório de Serviços do Windows - $env:COMPUTERNAME</h2><p>Gerado em: $(Get-Date)</p>" `
    -PostContent "<p style='font-size:12px;color:gray;'>Script desenvolvido por Paulo Costa</p>"

$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:

  1. Abra Task Scheduler.

  2. Crie Basic Task → Nome: Monitorar Serviços.

  3. Trigger: Daily → Hora desejada.

  4. Action: Start a Program → powershell.exe

    • Add arguments: -File "C:\temp\Services.ps1"

  5. Salve e teste.

Agora você terá relatórios diários automáticos e os serviços sempre monitorados.

O post Monitore e Automatize Serviços do Windows com PowerShell apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>
237
Cansado de caçar logs no Event Viewer? Veja como automatizar relatórios de Logon/Logoff com PowerShell​ https://paulocostati.com.br/windows-server/cansado-de-cacar-logs-no-event-viewer-veja-como-automatizar-relatorios-de-logon-logoff-com-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=cansado-de-cacar-logs-no-event-viewer-veja-como-automatizar-relatorios-de-logon-logoff-com-powershell Wed, 27 Aug 2025 00:07:42 +0000 https://paulocostati.com.br/?p=209 Cansado de caçar logs no Event Viewer? Veja como automatizar relatórios de Logon/Logoff com PowerShell Fala pessoal, tudo bem com […]

O post Cansado de caçar logs no Event Viewer? Veja como automatizar relatórios de Logon/Logoff com PowerShell​ apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>

Cansado de caçar logs no Event Viewer? Veja como automatizar relatórios de Logon/Logoff com PowerShell

Fala pessoal, tudo bem com vocês?
No post de hoje eu vou mostrar como usar PowerShell para gerar relatórios de logon e logoff de usuários no Windows.

Recebi recentemente mensagens de colegas de TI dizendo que estavam com dificuldades para acompanhar os acessos dos usuários em servidores e estações de trabalho. O Event Viewer até guarda tudo, mas vamos combinar: procurar evento por evento é cansativo, manual e nada produtivo.

A boa notícia é que dá para automatizar tudo com PowerShell e ter um relatório claro, pronto para auditorias, segurança ou até para resolver chamados de suporte.

 

Onde estão essas informações?

O Windows registra tudo no Log de Segurança. Para logon e logoff, os eventos principais são:

  • 4624 → Logon realizado com sucesso
  • 4634 → Logoff realizado
  • 4647 → Logoff iniciado pelo próprio usuário

Combinando esses três, conseguimos montar um relatório completo de entradas e saídas.

 

Script em PowerShell – CSV + HTML

Aqui está um script que vai além: ele gera tanto um CSV para análise crua quanto um HTML bem formatado para consulta rápida.

				
					Write-Host "Iniciando coleta de eventos de logon e logoff..." -ForegroundColor Cyan

## aqui você pode alterar para a quantidade de dias e o local de onde salvar
$Dias = 2
$OutputCsv = "C:\Temp\Relatorio-LogonLogoff.csv"
$OutputHtml = "C:\Temp\Relatorio-LogonLogoff.html"

#Pode alterar a quantidade de eventos...
$Events = Get-WinEvent -LogName Security -MaxEvents 100 | Where-Object {
    $_.Id -in 4624,4634,4647 -and $_.TimeCreated -gt (Get-Date).AddDays(-$Dias)
} | Select-Object TimeCreated, Id, @{Name="Usuario";Expression={$_.Properties[5].Value}}, MachineName

# Exporta para CSV
$Events | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8

# Exporta para HTML
$Html = $Events | ConvertTo-Html -Property TimeCreated,Id,Usuario,MachineName -Title "Relatório de Logon/Logoff" | Out-String
$Html | Set-Content $OutputHtml -Encoding UTF8

Write-Host "Relatórios gerados com sucesso:" -ForegroundColor Green
Write-Host "CSV: $OutputCsv"
Write-Host "HTML: $OutputHtml"
				
			

Resultado

 CSV – Para quem precisa importar em Excel ou Power BI.
 HTML – Para abrir no navegador, com visual limpo e fácil de entender.

Como evoluir esse script

Esse é só o começo. Você pode levar a automação ainda mais longe:

  • Enviar o HTML por e-mail diariamente usando Send-MailMessage
  • Agendar no Task Scheduler para rodar automaticamente
  • Centralizar logs de vários servidores e gerar relatórios unificados
  • Integrar com SIEM (Microsoft Sentinel, Splunk, etc.

Conclusão

Com algumas linhas de PowerShell, você já transforma um trabalho manual e chato em um relatório automático e organizado. Isso economiza tempo, dá mais controle sobre o ambiente e facilita auditorias de segurança.

Agora quero saber de vocês:
Hoje, como vocês monitoram logon/logoff no ambiente?
Esse tipo de relatório ajudaria no dia a dia da sua equipe?

Deixa aqui nos comentários que vou adorar saber.

O post Cansado de caçar logs no Event Viewer? Veja como automatizar relatórios de Logon/Logoff com PowerShell​ apareceu primeiro em Paulo Costa TI - Expert Solutions Microsoft | MCSE | MCSA | MCT.

]]>
209