用户登录脚本 - 显示其他网络信息

用户登录脚本 - 显示其他网络信息

我有一个 GPO,它在特定用户的用户登录时运行 PowerShell 脚本。

GPO 地址:

在此处输入图片描述

每当用户登录域时,此脚本都会发送一封电子邮件,该电子邮件包含此帐户登录的计算机名称以及日期/时间戳。

$MailMessage.Body = "User: Tom Logged into " + $env:computername + " Date: " + (Get-Date).ToString('dd/MM/yyyy hh:mm:ss tt')

我希望在此电子邮件中添加此帐户登录的远程计算机位置,例如:

电子邮件:

用户:Tom 登录工作站 1 日期:2021 年 1 月 1 日上午 8:30:00来自远程工作站-5

是否有一个环境字符串可以以某种方式显示这一点?

使用事件日志可能是正确的程序,但我没有发现任何事件显示网络上所有计算机的此信息。事件 ID 4624 甚至不显示工作站名称,只显示 IP 和大量过时的日志。事件 4778 显示被访问的用户和原始远程计算机,但仅显示与本地服务器相关的事件,而不是域。

答案1

另一种方法是使用 PSTermialServices:(https://github.com/imseandavis/PSTerminalServices

运行命令: Get-TSSession -ComputerName PC01Get-TSSession -ComputerName localhost

您将获得以下值:

在此处输入图片描述

这可以告诉您两种方式,用户在哪台计算机上进行远程控制以及谁在何处进行远程控制进入本地计算机。

答案2

根据评论的建议,您可以使用获取 NetTCPConnectioncmdlet 查看 TCP 连接属性,例如本地或远程 IP 地址、本地或远程端口以及连接状态。

PowerShell 示例

Get-NetTCPConnection -LocalPort 3389 | Select CreationTime, RemoteAddress

输出

CreationTime          RemoteAddress
------------          -------------
5/12/2021 10:18:58 PM ::           
5/24/2021 7:40:33 AM  10.99.99.11   
5/12/2021 10:18:58 PM 0.0.0.0
Get-NetTCPConnection -LocalPort 3389 | Sort CreationTime -Descending | Select CreationTime, RemoteAddress -First 1

输出

CreationTime         RemoteAddress
------------         -------------
5/24/2021 7:40:33 AM 10.99.99.11

此外,如果您运行的 Windows 版本不支持获取 NetTCPConnection您可以使用IPGlobalProperties.GetActiveTcpConnections 方法以及一些解析方法来获取已建立的远程桌面协议连接的 IP 地址。

PowerShell 示例

笔记:您可能需要通过按分号拆分来解析 LocalEndPoint 以获取端口。找出您在此处所需的确切逻辑将是一件小事。

@([System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().GetActiveTcpConnections())

或者

@([System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().GetActiveTcpConnections()) | % { $_.LocalEndPoint -Split(":") }

相关内容