Получить имя хоста клиентского компьютера RDP

У меня есть вопрос, который, я уверен, имеет простое решение, но он все время ускользает от меня.

На рисунке изображен сервер, которым пользуются несколько человек.
Все они используют одну и ту же учетную запись для входа в систему.
Единственный способ разграничить сессии - по имени хоста или IP.

Итак - Как посмотреть, на удаленном компьютере, имя хоста подключенного клиента?

Например, я RDP в сервер 256.12.13.1 с моего IP 256.12.13.7,
Есть ли команда, которую я мог бы запустить на сервере в этом удаленном сеансе, который будет выводить 256.12.13.7?

Я спрашиваю, потому что было бы хорошо, если бы эта команда выводила 256.12.13.9 когда человек подключается с этого другого IP.

Так что я могу поместить его в автозагрузку, и всякий раз, когда кто-то подключает скрипт, он запускается

gethostname >> rdplog.txt<br>
date /t >> rdplog.txt <br>
time /t >> rdplog.txt

Так что это может в основном равняться очень простому логину входа.

4 ответа

Решение

Вы можете написать пакетный скрипт как:

netstat -na | find "3389" | find "ESTABLISHED" >> C:\path_to_rdplog.txt
date /T >> C:\path_to_rdplog.txt
time /T >> C:\path_to_rdplog.txt
echo. >> C:\path_to_rdplog.txt
echo ----------- >> C:\path_to_rdplog.txt
echo. >> C:\path_to_rdplog.txt

Вам просто нужно убедиться, что входящий пользователь имеет права на запись в C:\path_to_rdplog.txt

Очень старая тема, но все равно. Мы использовали для проверки переменной среды CLIENTNAME, которая установлена ​​в сеансе RDP. У нас было старое приложение, которое не могло легко использовать Windows API или Powershell, и проверило эту переменную среды. Эта переменная содержит имя хоста клиентского компьютера, устанавливающего соединение RDP.

Новый ответ Powershell на довольно старый вопрос

      (Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational';ID=1149;StartTime=(Get-Date).AddDays(-31);} | ForEach-Object {[PSCustomObject] @{User=$_.Properties[0].Value;ClientName=$_.Properties[1].Value;IPAddress=$_.Properties[2].Value; TimeCreated=$_.TimeCreated;}} | Where-Object User -eq $env:USERNAME | Sort-Object -Property TimeCreated -Descending | Select-Object -First 1).ClientName

Этот фрагмент собирает все события из журнала событий служб терминалов за последний 31 день и создает пользовательские объекты с именем пользователя, именем клиента, IP-адресом и меткой времени входа в систему. Затем он фильтрует настраиваемые объекты по имени текущего пользователя, затем сортирует настраиваемые объекты в порядке убывания даты входа в систему и, наконец, выбирает самые верхние (т. е. самую последнюю запись в журнале событий) и извлекает имя клиента из настраиваемого объекта. Я буквально прохожу по коду и последовательно объясняю каждый фрагмент кода — на самом деле в коде не так уж и много.

Важно отметить, что в журнале событий есть запись об успешных RDP-соединениях с интересующими нас данными. Анализ, фильтрация, сортировка и извлечение соответствующих данных для превращения их в полезную информацию — вот суть игры!

Microsoft MVP Шей Леви сделал PSTerminalServices Модуль PowerShell с командлетами служб терминалов.

Его нужно установить, его нет по умолчанию.

Я еще не использовал это, я только нашел это.

Другие вопросы по тегам