1

我有一个 vbs 脚本来监视远程登录到服务器的用户它使用“qwinsta”来获取用户名,我可以简单地循环等待断开连接。

但 qwinsta 不返回远程用户的主机名或 IP 地址。我已经搜索了一上午,找不到任何 cmd 命令或 wmi 命令来根据用户名或会话 ID 获取已连接用户的 ip/host。

有没有人有任何其他想法来获取此信息?我找到了这个提供 IP 地址的外部实用程序:http: //home.fnal.gov/~jklemenc/tslistusers.html但我宁愿不使用外部程序。我假设它正在使用某种 wmi 或其他方法来获取我可以在我自己的脚本中以某种方式执行的 ipaddress。

我知道我可以使用 netstat 和过滤端口 3389 来仅获取 RDP 会话并以这种方式获取 IP,但是从那时起我无法知道哪个 IP 属于哪个用户。

4

2 回答 2

1

此信息通过(大部分)未记录的 API WinStationQueryInformationW 公开。据我所知,它没有通过 WMI 或任何命令行实用程序或 COM 对象公开。

如果您可以使用 .NET 语言,则可以使用Cassia 库来处理 Win32 API 调用——请参阅 ITerminalServicesSession.RemoteEndPoint(通过以访客身份登录在此处下载最新的主干构建)。应该可以使用 tlbexp 和 regasm从 VBScript 使用 Cassia ,但我还没有尝试过。

于 2012-04-25T13:17:47.853 回答
1

您可以在批处理文件中使用下面的代码将主机名的文本文件传递到数组中并查询每个 rdp 会话信息...(只需确保 Server_List.txt 文件位于您创建的批处理文件旁边)

@echo off
setlocal EnableDelayedExpansion
echo RDPSessionINFO > ./results.txt
echo ============== >> ./results.txt

set i=0
for /F %%a in (Server_List.txt) do (
   set /A i+=1
   set array[!i!]=%%a
)
set n=%i%

for /L %%i in (1,1,%n%) do echo !array[%%i]! >> ./results.txt && qwinsta /server:!array[%%i]!>> ./results.txt && echo =================== >> ./results.txt

start notepad.exe ./results.txt
于 2015-10-22T08:38:49.303 回答