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


37

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

Благодарность

Ответы:


47

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

Они предложили использовать WMIC (команда интерфейса управления Windows), которая доступна в Windows:

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

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

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

вернет имя пользователя, в данный момент вошедшего в "имя_ рабочей станции"

ОБНОВЛЕНИЕ: Это должно работать и в Windows 10 - если вы являетесь администратором на удаленной машине.


Когда я запускаю эту команду удаленно или локально, я получаю только одну строку вывода " UserName", в которой больше ничего нет, даже если я вошел на эту машину.
— Дай

@Dai Используете ли вы XP или Vista или 2003? Этот вопрос был для тех, кто
— Preet Sangha

17

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


Microsoft Sysinternals Люкс имеет инструмент под названием PsLoggedOn ,

psloggedon.exe -l

Также есть NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme

3
sysinternals это просто бизнес. Я надеюсь, что они заплатили Марку кучу денег, чтобы пойти туда, в настоящее время они не помешали ему делать хорошую работу, которую он делал раньше, и долго это может продолжаться.
— gbjbaanb

@gbjbaanb, я рад этому. Надеюсь, он продолжает обновлять и добавлять в пакет.
— Ник

1
Это творило чудеса для меня, тогда как WMICв принятом ответе жаловался, что RPC не работает. Это новая банка червей, которую я не хочу открывать прямо сейчас, поэтому я зарегистрировался в psloggedon, и я очень счастлив.
— Майк С

12

Я использовал 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 сообщает о нескольких пользователях, не знаю почему, но в моем случае это был один и тот же пользователь, поэтому это не было проблемой.


2
Причина в том, что в систему может войти более одного пользователя. Быстрое переключение пользователей и т. Д. Было введено несколько лет назад. I) t держит другого пользователя в системе.
— TomTom

Good Point @TomTom, я забыл об этом, я думаю, что [win32_loggedonuser] также вернет любого, кто имеет psexec или powershell'd.
— MDMoore313

6

Вы можете получить эту информацию из 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.