跟踪 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
.
我们正在尝试通过 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
.