Назад | Перейти на главную страницу

Как проверить, кто в настоящее время вошел в систему на рабочей станции Windows из командной строки?

Среда находится в домене, сервер - Windows Server 2003, на рабочих станциях установлены Vista и XP.
Мне нужен способ удаленно проверить, кто в настоящее время вошел в систему на рабочей станции, желательно из простой командной строки и без sysinternals или сторонних программ.

Спасибо

Это был первоисточник но это теперь 404:

Они предложили использовать (Windows Management Interface Command) WMIC, который доступен в Windows:

WMIC /NODE: xxx.xxx.xxx.xxx COMPUTERSYSTEM GET USERNAME 

Вернет имя пользователя, которое в данный момент вошло в xxx.xxx.xxx.xxx, или

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

вернет имя пользователя, который в данный момент вошел в "workstation_name"

ОБНОВЛЕНИЕ: это должно работать и в Windows 10 - если вы являетесь администратором удаленного компьютера.

Извините, не заметил, что вы не хотите использовать Sysinternals.
Теперь это инструмент Microsoft Technet, есть ли конкретная причина не использовать его?
Раньше я предпочитал Sysinternals другим сторонним инструментам. Марк Руссинович перешел в Microsoft.


В Microsoft Sysinternals В Suite есть инструмент под названием Пслоггедон,

psloggedon.exe -l

А также есть NBTSTAT,

nbtstat -a NetBIOS-Computer-NAme

Я использовал win32_loggedonuser, но столкнулся с проблемой, когда более одного пользователя домена был возвращен, поэтому он не работал для моих целей. Вместо этого я использовал (в PowerShell)

#Get Currently logged in user
$ExplorerProcess = gwmi win32_process | where name -Match explorer

if($ExplorerProcess.getowner().user.count -gt 1){
    $LoggedOnUser = $ExplorerProcess.getowner().user[0]
}

else{
    $LoggedOnUser = $ExplorerProcess.getowner().user
}

если это потому, что иногда getowner по какой-то причине сообщает о нескольких пользователях, не знаю почему, но в моем случае это был тот же пользователь, поэтому это не было проблемой.

Вы можете получить эту информацию от win32_loggedonuser.

Из эта страница:

strComputer = "."   ' " use "." for local computer

Set objWMI = GetObject("winmgmts:" _
              & "{impersonationLevel=impersonate}!\\" _
              & strComputer & "\root\cimv2")

Set colSessions = objWMI.ExecQuery _
    ("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10")

If colSessions.Count = 0 Then
   Wscript.Echo "No interactive users found"
Else
   For Each objSession in colSessions
     If objSession.LogonType = 2 Then
       WScript.Echo "Logon type: Console"
     Else
       WScript.Echo "Logon type: RDP/Terminal Server"
     End If
     Set colList = objWMI.ExecQuery("Associators of " _
         & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
         & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )

     For Each objItem in colList
       WScript.Echo "User: " & objItem.Name
       WScript.Echo "FullName: " & objItem.FullName
       WScript.Echo "Domain: " & objItem.Domain
     Next
     Wscript.Echo "Session start time: " & objSession.StartTime
     WScript.Echo
   Next
End If