Як перевірити, хто зараз увійшов на робочу станцію 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.