Comandos remotos
Como executar comandos remotos
Exemplos de comandos remotos
Histórico de logon/logoff Monitoramento de produtividade
# Dias para buscar
$Dias = 1
$DataInicial = (Get-Date).AddDays(-$Dias)
# IDs de eventos: logon (4624), logoff (4647, 4634)
$IdsEventos = @(4624, 4634, 4647)
# Buscar eventos do log de segurança
$Eventos = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = $IdsEventos
StartTime = $DataInicial
} -ErrorAction SilentlyContinue
# Filtrar e formatar
$LogsUsuario = foreach ($evento in $Eventos) {
$xml = [xml]$evento.ToXml()
$usuario = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "TargetUserName" } | Select-Object -ExpandProperty '#text'
$dominio = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "TargetDomainName" } | Select-Object -ExpandProperty '#text'
$logonType = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "LogonType" } | Select-Object -ExpandProperty '#text'
# Excluir contas de sistema ou máquina
if ($usuario -and
$usuario -notmatch '^(\$|ANONYMOUS LOGON|D\$|C\$|SYSTEM|LOCAL SERVICE|NETWORK SERVICE)$' -and
$usuario -notlike '*$') {
# Apenas sessões interativas: 2 (console) ou 10 (RDP)
if (($evento.Id -eq 4624 -and ($logonType -eq "2" -or $logonType -eq "10")) -or $evento.Id -in @(4634, 4647)) {
[PSCustomObject]@{
DataHora = $evento.TimeCreated
Usuario = "$dominio\$usuario"
Evento = switch ($evento.Id) {
4624 { "Logon" }
4647 { "Logoff iniciado" }
4634 { "Sessão encerrada" }
}
}
}
}
}
# Mostrar resultado
$LogsUsuario | Sort-Object DataHora | Format-Table -AutoSize
# Exportar para CSV (opcional)
#$LogsUsuario | Export-Csv -Path "C:\Temp\LogUsuario.csv" -NoTypeInformation -Encoding UTF8
Atualizado
Isto foi útil?