Skip to content

Instantly share code, notes, and snippets.

@mdanshin
Created August 10, 2023 15:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mdanshin/fb5aca47c6a1c535f062f4fb10bfd053 to your computer and use it in GitHub Desktop.
Save mdanshin/fb5aca47c6a1c535f062f4fb10bfd053 to your computer and use it in GitHub Desktop.
Получение статистики RDP подключений
# Задание имени журнала событий, из которого будем получать данные.
$LogName = 'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational'
# Имя пользователя, для которого не будем обрабатывать события.
$ExcludedUsername = "DOMAIN\username"
# Имя компьютера, с которого получаем события.
$ComputerName = "localhost"
# Определение функции IP2Name для преобразования IP-адреса в имя хоста с помощью Resolve-DnsName.
function IP2Name($IP) {
Resolve-DnsName -Name $IP -ErrorAction SilentlyContinue | Select-Object -ExpandProperty NameHost
}
# Создание пустого массива для хранения результатов.
$Results = @()
# Получение событий из журнала событий с определенным идентификатором.
$Events = Get-WinEvent -LogName $LogName -ComputerName $ComputerName | Where-Object {$_.id -eq 21}
# Перебор каждого события в коллекции событий.
foreach ($Event in $Events) {
# Извлечение XML-данных из события.
$EventXml = [xml]$Event.ToXML()
# Извлечение имени пользователя из XML-данных.
$Username = $EventXml.Event.UserData.EventXML.User
# Проверка, что имя пользователя не равно исключенному имени.
if ($Username -ne $ExcludedUsername) {
# Создание хэш-таблицы для хранения результатов текущего события.
$ResultHash = @{
Time = $Event.TimeCreated.ToString()
Username = $Username
'Source IP' = $EventXml.Event.UserData.EventXML.Address
'Source HostName' = IP2Name($EventXml.Event.UserData.EventXML.Address)
}
# Создание объекта PSObject с использованием хэш-таблицы и добавление его к массиву результатов.
$Results += (New-Object PSObject -Property $ResultHash)
}
}
# Сортировка результатов по времени в убывающем порядке.
$ResultsSorted = $Results | Sort-Object -Descending {[DateTime]::Parse($_.Time)}
# Отформатированный вывод результатов в виде таблицы с автоматической подстройкой ширины столбцов.
$ResultsSorted | Format-Table -AutoSize
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment