获取 RDP 客户端计算机的主机名

获取 RDP 客户端计算机的主机名

我有一个问题,我确信它有一个简单的解决方案,但我一直无法解决。

图片中有一个服务器,有几个人在使用。
他们都使用同一个账户登录。
区分会话的唯一方法是通过主机名或 IP。

那么 - 如何在远程计算机上查看已连接客户端的主机名?

例如,我256.12.13.1从我的 IP 通过RDP 进入服务器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

所以这基本上可以等同于一个非常简单的登录日志。

答案1

您可以编写如下批处理脚本:

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 具有写入权限

答案2

无论如何,这是一个非常古老的话题。我们曾经检查过在 RDP 会话中设置的环境变量 CLIENTNAME。我们有一个较旧的应用程序,无法轻松使用 Windows API 或 Powershell,并检查了这个环境变量。此变量保存建立 RDP 连接的客户端计算机的主机名。

答案3

Microsoft MVP Shay Levy 做了PSTerminalServices具有终端服务 cmdlet 的 PowerShell 模块。

它需要安装,默认情况下它不存在。

我还没有用过它,刚刚发现它。

答案4

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 连接,其中包含我们感兴趣的数据。解析、过滤、排序和提取相关数据以将其转化为有用的信息才是游戏的名称!

相关内容