PowerShell: Как в windows server выяснить какие пользователи заходили по времени и дате, сформировать таблицу

Материал из КРАТКАЯ СПРАВОЧНАЯ DIGITAL-ORGY
Перейти к навигации Перейти к поиску
# Убрали лимит (выгребаем всё доступное)
$Events = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624}

$Results = $Events | ForEach-Object {
    $xml = [xml]$_.ToXml()
    $TargetUserName = ($xml.Event.EventData.Data | Where-Object {$_.Name -eq "TargetUserName"})."#text"
    $LogonType = ($xml.Event.EventData.Data | Where-Object {$_.Name -eq "LogonType"})."#text"
    $IpAddress = ($xml.Event.EventData.Data | Where-Object {$_.Name -eq "IpAddress"})."#text"

    [PSCustomObject]@{
        TimeCreated = $_.TimeCreated
        User        = $TargetUserName
        LogonType   = $LogonType
        SourceIP    = $IpAddress
    }
}

# Фильтруем RDP, группируем и находим последний вход
$Results | Where-Object { $_.LogonType -eq "10" } | 
    Group-Object User | 
    ForEach-Object {
        $_.Group | Sort-Object TimeCreated -Descending | Select-Object -First 1
    } | 
    Select-Object User, TimeCreated, SourceIP |
    Out-GridView -Title "Максимально полный список RDP входов"