- PsLoggedOn 结合注册表(HKEY_USERS)和 NetSessionEnum 来列出本地和基于资源的会话。
- IPC$ 与计算机帐户的连接通常是合法的;审计 4624 并审查 SMB 会话。
- 通过 quser、Get-CimInstance、事件查看器、PsLogList、PsFile 和模块进行增强 PowerShell的.
- 应用安全性:MFA、最小特权, VPN 并监控启动尝试。

在Windows环境中,控制哪些用户登录到您的计算机对于预防安全事件和审核访问至关重要。Sysinternals套件中的 PsLoggedOn 是查看本地会话以及通过共享资源建立的连接(包括本地计算机和远程计算机)的关键工具。
除了 PsLoggedOn 之外,还有一些原生命令和实用程序可以帮助验证信息、激活审计并检测可疑登录。本指南将介绍 PsLoggedOn 的工作原理、语法、实际示例(例如使用团队帐户在 IPC$ 上的会话)、替代方法以及加强远程访问安全性的最佳实践。
PsLoggedOn 是什么以及它如何检测在线用户?
PsLoggedOn 是一个 PsTools 小程序,用于显示哪些用户已在本地登录,以及哪些用户通过本地或远程计算机上的资源连接。它的逻辑结合了两个数据源:用于本地会话的注册表和用于通过共享资源建立会话的 NetSessionEnum API。
对于本地会话,PsLoggedOn 会将注册表中加载了用户配置文件的用户视为已登录用户(参见Windows 注册表结构)。它会检查 HKEY_USERS 注册表项,查找用户 SID,并将每个 SID 解析为其对应的帐户名,以便以易于理解的格式显示。
对于通过资源(例如 IPC$、C$ 或 ADMIN$)建立的远程会话,它使用 NetSessionEnum API 枚举活动连接。这就解释了为什么在查询远程计算机时,您自己可能看起来像是通过共享资源连接的:系统会建立一个会话来访问远程系统的注册表。
此外,PsLoggedOn 还接受用户名作为参数。在这种情况下,它会扫描网络上的计算机,并告知您该用户是否已登录到任何一台计算机上。这在修改用户配置文件或策略之前非常有用。
安装、版本和要求
安装非常简单:只需将 PsLoggedOn 复制到 PATH 环境变量中的某个位置并运行即可。将 psloggedon.exe(如果适用,还要将 psloggedon64.exe)放在系统文件夹中,或者从 PsTools 文件夹中使用它。
PsLoggedOn 是 PsTools 的一部分,PsTools 是 Sysinternals 的一套工具集,其中还包括 PsInfo、PsFile、PsLogList、Process Explorer 和 Process Monitor 等实用程序。您可以从 Sysinternals 官方网站下载 PsTools(约 2,7 MB),如果您愿意,也可以使用 winget 通过命令“winget install sysinternals --accept-package-agreements”安装完整的套件。
兼容性:PsLoggedOn客户端运行于Windows Vista及更高版本,服务器端运行于Windows Server 2008及更高版本。官方文档记录的版本为PsLoggedOn v1.35,上次更新时间为2016年,但这并不妨碍它继续用于支持和审计任务。
PsLoggedOn 用法和语法
基本标注功能仅支持非常少的几个开关。它是一个简单、快速且直接的工具。
psloggedon
主要参数:-l 仅显示本地会话,-x 隐藏登录时间,- 会显示选项和计量单位的帮助信息。您可以使用 UNC 名称(\\computer)或用户名指定远程计算机,以便在网络上搜索它。
控制台或 PowerShell 中的典型示例:列出本地会话并按 PC 资源排序,查询远程会话或搜索特定用户。
psloggedon
psloggedon \\EQUIPO-REMOTO
psloggedon usuario.dominio
请注意,查询远程计算机时,由于需要访问其注册表,您的帐户可能会显示为通过共享资源连接。如果您只想查询本地会话,请使用 `-l` 开关。
解释结果:IPC$ 连接和带有 $ 符号的计算机帐户
常见的情况是收到关于计算机帐户(以“$”结尾)在 IPC$ 资源上建立会话的警报。这通常令人担忧,但往往源于 Windows 环境中的合法活动以及通过命名管道通信的服务。
IPC$ 是服务器服务创建的一种特殊资源。它允许打开命名管道,从而利用系统组件和已安装的应用程序/服务。通过这种连接,即使是匿名用户也可以执行某些有限的操作,例如枚举共享资源,具体取决于配置。因此,在 IPC$ 中看到会话本身并不意味着存在恶意活动。
在 Windows 10 专业版计算机上,IPC$ 资源完全正常。服务器服务会公开 IPC$ 以支持命名管道和其他系统操作。如果 PsLoggedOn 在“通过共享资源连接的用户”中显示类似“DOMAIN\COMPUTER-A$”的条目,通常是因为该计算机已与您的计算机建立了 SMB 会话(例如,用于远程管理)。
如何调查来源?这些检查有助于利用原生工具和 PsLoggedOn 提供的功能来区分合法连接和可疑连接。目标是将连接映射到进程、任务或系统组件。
- 检查 SMB 会话在受影响的计算机上,打开计算机管理>共享文件夹>会话和打开文件以查看谁在线以及他们正在使用什么。
- 网络会话命令:运行“net session”列出共享、主机和用户的当前连接。
- 事件查看器:在“Windows 日志 > 安全”中查找事件 4624(成功登录),并查看登录类型(例如,网络类型 3)。该事件详细说明了帐户、工作站和地址。
- 审计策略:在“gpedit.msc”>“计算机配置”>“Windows设置”>“安全设置”>“本地策略”>“审核策略”>“审核登录事件”中启用登录审核,勾选成功和错误。
- 任务和服务:检查任务计划程序、远程管理服务、库存工具和防病毒/EDR,这些可能会打开查询或部署会话。
如果连接模式一致(例如,在工作时间内,总是相同的带有“$”符号的设备连接),并且与管理或监控活动相符,则可能是正常现象。如果您检测到异常连接、非工作时间连接或来自未知设备的连接,则建议查看日志并限制访问权限。

查看谁登录的替代方法
将 PsLoggedOn 与原生工具结合使用,可以获得更全面的信息。结合多个数据源可以减少误报,并提供有关会话的上下文信息。
控制台/PowerShell(quser/query user)。运行“quser /server:RemoteComputer”或“query user /server:RemoteComputer”命令可以列出远程桌面/终端会话。此方法在启用了远程桌面服务 (RDS) 的服务器上快速实用,也适用于支持远程桌面协议 (RDP) 的计算机。
quser /server:Equipo1
query user /server:Equipo2
PowerShell (Get-CimInstance)。检查本地交互式会话的简单方法:`Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName Team | Select -ExpandProperty username`。请注意,在某些配置下,如果有人通过 RDP 连接,则可能不会返回值。
Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName EQUIPO | Select -ExpandProperty username
在控制台中运行 Sysinternals PsLoggedOn 命令。如果您安装了该套件,只需调用“PsLoggedOn \\RemoteComputer”命令,即可获取本地会话和通过资源建立的连接信息。这是交叉引用注册表和 SMB 共享会话的最直接方法。
PsLoggedOn \\EQUIPO-REMOTO
NBTSTAT 命令。`nbtstat -a Computer` 或 `nbtstat -A IPAddress` 会显示 NetBIOS 命名表。这是一种旧方法,可以提供一些线索,但如果活跃用户没有访问过共享资源,则此方法不太可靠。
nbtstat -a EQUIPO
nbtstat -A 192.0.2.25
事件查看器。转到“Windows 日志 > 安全”,并按 ID 4624(成功启动)进行筛选。事件详细信息提供用户名、域和工作站信息。需要管理员权限,并且必须启用审核功能。
任务管理器。在“用户”选项卡中,您可以查看本地计算机上的活动会话,包括远程会话。虽然它并不总是能清晰地区分访问类型,但有助于快速检查。
远程桌面服务管理器(Windows Server)。在 MMC 中,添加 RDS 管理单元以查看详细的“用户”和“会话”选项卡(会话 ID、状态等)。它是 RDSH 主机的参考控制台。
用于审计的脚本和相关实用程序
当您需要生成大规模报告(例如组织单元、域或设备清单)时,使用脚本可以极大地加快处理速度。为此,有一些 PowerShell 模块和 Sysinternals 工具是专门设计的。
PowerShell Get-UserLogon 命令。您可以加载一个包含函数的模块,用于按计算机、组织单元 (OU) 或整个域收集登录信息。将其保存为 psm1 到“C:\Program Files\WindowsPowerShell\Modules\Get-UserLogon”目录下,导入后即可使用,只需使用一些简单的参数即可。
# Todo el dominio
Get-UserLogon -All
# Por OU
Get-UserLogon -OU 'ou=Computers,dc=midominio,dc=local'
# Un equipo concreto
Get-UserLogon -Computer EQUIPO-AD01
PsLogList(Sysinternals)。如果您需要关联安全事件,psloglist 可以转储本地或远程事件日志,甚至允许您使用不同的凭据进行身份验证。它是 elogdump 的高级版本,可以从日志源计算机中提取消息。
# Últimas 100 entradas del registro de Seguridad en un equipo remoto
psloglist \\EQUIPO -n 100 -l security
# Filtrar por origen o ID de evento
psloglist -o "Microsoft-Windows-Security-Auditing" -i 4624
# CSV-friendly (una entrada por línea)
psloglist -s -t ';' -l security
其参数允许您按日期(-a、-b)、时间窗口(-h、-m、-d)、条目数(-n)、要包含或排除的 ID(-i、-e)、来源(-o、-q)进行限制,甚至可以使用 -w 在本地系统上实时等待新事件。来源中引用的版本为 v2.81(2019 年更新)。
PsFile(Sysinternals)。可用于查看远程计算机上哪些文件已被网络用户打开、它们的访问类型,甚至可以通过指定文件 ID 来关闭它们(如果需要释放文件)。如果您没有足够的权限,则需要提供凭据。
该套件中其他与诊断功能相辅相成的实用工具包括:用于清点资源的 PsInfo、用于检查进程和 DLL 的 Process Explorer 和 Process Monitor、用于枚举活动会话的 LogonSessions 以及用于内存映射的 RAMMap。Sysinternals生态系统涵盖了从会话检测到深度系统分析的方方面面。
加强远程访问安全性
监控访客身份固然重要,但缩小攻击面更为关键。这些措施能够提高安全标准,防止意外情况发生。
- 强密码 并对所有具有远程访问权限的帐户进行定期轮换。
- 多因素身份验证(MFA) 即使凭证被盗,也能切断未经授权的访问。
- 最小特权原则:仅具有必要的权限,避免广泛的会员资格。
- VPN 封装和加密公共或混合网络上的远程流量。
- 启动监督 并发出异常活动警报(意外的起源、奇怪的时间)。
借助 PsLoggedOn,您可以一目了然地按资源查看本地会话和连接,并使用 quser、NBTSTAT 和事件查看器等命令来完善信息。如果您正确解读 IPC$ 中的条目并确认其中包含“$”符号,启用审核功能,并使用 PsLogList、PsFile 和 PowerShell 模块,您将能够控制谁在何处连接以及连接原因,并为应对任何可疑活动奠定坚实的基础。
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。
