跟踪 RDP 会话的整个历史记录

Tracking the entire history of RDP sessions

我们正在尝试通过 powershell 获取 rdp 服务器的完整历史记录。 我已经看过一些例子,比如 Qwinsta、quser、query user; 但这并不是我想要的。 我正在寻找可以在 Powershell 中编写的内容,以提供它的完整历史。从机器启动的那天起。

示例:

假设我有一个我去年创建的服务器。 我想知道去年有哪些用户登录过这个服务器,哪个是 diss 或活跃的(有点像查询用户或 qwinsta),最后一次有人连接到这个服务器是什么时候。

NAME_OF_SERVER

 SESSIONNAME       USERNAME                 ID  STATE        DEVICE        LAST_LOGIN
 services                                    0  Disc                        
 console                                     1  Conn                        
 rdp-tcp#29        user1                     2  Active                      
                   user2                     3  Disc                        

感谢任何形式的帮助。

您可以通过查询 RDP 事件日志来查找历史记录。有一些不同的事件表示 RDP 登录,但我将在此处使用 RemoteConnectionManager 日志:

$RDPAuths = Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational' -FilterXPath @'
<QueryList><Query Id="0"><Select>
  *[System[EventID=1149]]
</Select></Query></QueryList>
'@ 

# Get specific properties from the event XML
[xml[]]$xml=$RDPAuths|Foreach{$_.ToXml()}
$EventData = Foreach ($event in $xml.Event) { 
  # Create custom object for event data
  New-Object PSObject -Property @{  
    TimeCreated = (Get-Date ($event.System.TimeCreated.SystemTime) -Format 'yyyy-MM-dd hh:mm:ss K')
    User   = $event.UserData.EventXML.Param1
    Domain = $event.UserData.EventXML.Param2
    Client = $event.UserData.EventXML.Param3
  }
}
$EventData | FT

您可以很容易地按用户排序并使用 $EventData:

中的输出找到他们上次登录的时间
TimeCreated                User   Domain   Client      
-----------                ----   ------   ------      
2021-09-23 12:02:03 -04:00 User01 MyDomain 10.10.10.10 
2021-09-23 12:00:42 -04:00 User01 MyDomain 10.10.10.10
2021-09-21 11:39:08 -04:00 User02 MyDomain 10.10.10.20

这里有一个明显的限制,即您只能搜索事件日志中最远的时间,因此“从机器启动之日起”。可能无法实现,具体取决于事件日志的配置方式。

此处的另一个选项可以是只检查 C:\users\* 哪些用户曾经登录过。


为了检查 当前 个会话,我主要使用 quser。如果您的服务器是 运行ning 终端服务,您可以使用 RemoteDesktop 模块和 运行 命令,例如 Get-RDUserSession.