C# 如何获得;“初级”;远程计算机的用户

C# 如何获得;“初级”;远程计算机的用户,c#,wmi,C#,Wmi,我需要知道如何远程获取计算机主要用户的名称和域。我最好将主用户定义为登录次数最多的用户,或一段时间内登录时间最长的用户。或者,如果这是不可能的,则为用户当前/上次登录 目前,我扫描一个OU中所有计算机对象的活动Directoy。然后我循环遍历它们,并尝试使用WMI获取用户的名称。 我在Win32计算机系统中查看用户名是否返回值。如果不是这样,我会查看Win32\u LogonSession并获取所有等于2或10的logonType的用户名。如果返回none或多个值,我将放弃结果,并在Win32\

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

目前,我扫描一个OU中所有计算机对象的活动Directoy。然后我循环遍历它们,并尝试使用WMI获取用户的名称。 我在Win32计算机系统中查看用户名是否返回值。如果不是这样,我会查看
Win32\u LogonSession
并获取所有等于2或10的logonType的用户名。如果返回none或多个值,我将放弃结果,并在
Win32\u Process
中查找所有非系统进程,并将主用户定义为运行大多数进程的用户

我的方法有几个问题:

  • Win32\u ComputerSystem
    -用户名通常为空
  • Win32\u LogonSession
    通常返回多个值或无值。只能有一个主用户
  • 查看
    Win32\u进程
    有点可笑,因为这只会返回具有大多数进程的用户,很可能不是主用户
  • 如果当前没有用户登录,则查看
    Win32\u进程
    不会返回任何值,并且这三个步骤都不会返回值
  • 我的3种方法可能会让我成为当前用户。有人知道获取主要用户的方法吗?或者至少是一种更好的获取电流的方法。不一定使用WMI


    如果您在远程计算机上具有管理员权限并具有共享访问权限,请向

    表示感谢 您可以使用计算机管理并选择 连接到其他计算机,查看该计算机上有哪些用户和组。 或者,如果远程计算机具有该功能,则可以使用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
    说明UI是另一个系统内部工具

    也请检查此项:


    另外,如果要使用远程计算机IP查找远程计算机上当前登录用户的用户名,请转到命令行键入
    nbtstat-a
    ,这将返回计算机上注册的所有NetBIOS名称,其中之一是用户名。

    如果您在远程计算机上具有管理员权限并具有共享访问权限 您可以使用计算机管理并选择 连接到其他计算机,查看该计算机上有哪些用户和组。 或者,如果远程计算机具有该功能,则可以使用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
    说明UI是另一个系统内部工具

    也请检查此项:

    另外,如果您想使用远程计算机IP在远程计算机上查找当前登录用户的用户名,请转到命令行键入
    nbtstat-a
    ,这将返回计算机上注册的所有NetBIOS名称,其中一个是用户名