如何获得远程计算机的“主要”用户

时间:2011-09-23 15:05:16

标签: c# wmi

我需要知道如何远程获取计算机主要用户的名称和域名。我将主要用户定义为用户最多登录时间或一段时间内最长时间。或者,如果这是不可能的,则用户当前/上次登录。

目前,我扫描一个OU中所有计算机对象的Active Directoy。然后我循环它们,并尝试使用WMI获取用户的名称。 我查看Win32_ComputerSystem以查看UserName是否返回值。如果不是这种情况,我会查看Win32_LogonSession并获取所有等于2或10的LogonType的用户名。如果这返回none或多个值,我将丢弃结果并查看Win32_Process所有非系统进程,并将主用户定义为运行大多数进程的用户。

我的方法有几个问题:

  1. Win32_ComputerSystem - UserName通常为空。
  2. Win32_LogonSession经常会返回多个值或没有值。只能有一个主要用户。
  3. 查看Win32_Process有点荒谬,因为这只会让我回复大多数进程的用户,很可能不是主用户。
  4. 如果当前没有用户登录,则查看Win32_Process将不返回任何值,并且3个步骤中的任何一个都不会返回值。
  5. 我的3种方法可能会让我成为当前用户。有谁知道获得主要用户的方法?或者至少是获得当前的更好方法。不一定使用WMI。

    由于

1 个答案:

答案 0 :(得分:0)

如果您具有远程计算机的管理员权限并共享访问权限 您可以使用计算机管理并选择 连接到其他计算机并查看该计算机上的用户和组。 或者,如果远程计算机具有该功能,则可以使用TS远程管理或远程桌面。

使用psexec.exe(www.sysinternals.com)在远程PC上运行命令:

psexec \\pc1 net user | find /i "Steve" 
psexec \\pc1 c:\tool\psloggedon | find /i "Steve" 

1)查找John Black在PC1上是否有帐户。

2)查找他当前是否已登录。 使用psloggedon.exe表示uis是另一个SysInternals工具。

另请检查:http://www.wisesoft.co.uk/scripts/vbscript_display_username_of_user_on_a_remote_computer.aspx

此外,如果要使用远程计算机IP在远程计算机上找到当前登录用户的用户名,请转到命令行,键入nbtstat -A <IP of remote computer>这将返回在该命令行上注册的所有NetBIOS名称计算机,其中一个是用户名。