Среда находится в домене, сервер - Windows Server 2003, на рабочих станциях установлена Vista и XP).
Мне нужен способ удаленной проверки того, кто в данный момент вошел на рабочую станцию, желательно из какой-то простой командной строки и без sysinternals или сторонних программ.
Спасибо
Это было первоисточник но теперь 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 - если вы являетесь администратором на удаленной машине.
Извините, не заметил, что вы не хотите использовать Sysinternals.
Это теперь инструмент Microsoft technet, есть какая-то конкретная причина не использовать его?
Я предпочел Sysinternals раньше других сторонних инструментов Марк Руссинович перешел в Microsoft.
Microsoft Sysinternals Suite имеет инструмент под названием Psloggedon ,
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