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?