Як перевірити, хто зараз увійшов на робочу станцію Windows з командного рядка?


37

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

Спасибі

Відповіді:


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? Це питання було для тих осс
Преет Сангха

17

Вибачте, не помітили, що не хочете користуватися Sysinternals.
Це зараз інструмент технології Microsoft, якась конкретна причина не використовувати його?
Я віддав перевагу Sysinternals перед іншими сторонніми інструментами до того, як Марк Русинович перейшов у Microsoft.


У пакеті Microsoft Sysinternals Suite є інструмент під назвою Psloggedon ,

psloggedon.exe -l

Є також NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme

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

@gbjbaanb, я радий тому. Сподіваюся, він продовжує оновлювати та додавати до набору.
nik

1
Це творило чудеса для мене, тоді як WMICу прийнятій відповіді скаржився, що RPC не працює. Це нова банка глистів, яку я не відчуваю, як зараз відкриватись, тому я зареєструвався в psloggedon і я дуже щасливий.
Майк S

12

Я використовував win32_loggedonuser, але зіткнувся з проблемою, коли було повернуто більше одного користувача домену , тому він не працював для моїх цілей. Натомість я використав (In 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'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.