Ответы:
не графический интерфейс, но:
for /L %x in (2,1,254) do psloggedon \\172.21.0.%x
сделает сканирование с 172.21.0.2-254. Вы также можете вложить:
for /L %z in (16,1,31) do for /L %x in (1,1,254) do psloggedon \\172.21.%y.%x
Это просканирует подсети 172.21. {16-31} .x.
Я нашел этот сценарий . Он сканирует весь домен и дает хороший вывод (имя компьютера и имя пользователя).
whoisloggedinwhere.bat> users.txt
@ эхо выключено SETLOCAL for / f "Tokens = 1" %% c in ('net view / domain: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do ( for / f "Tokens = *" %% u in ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do ( вызов: сообщить %% c "%% u" ) ) Endlocal Перейти к: EOF : доклад установить работу =% 1 set comp =% work: ~ 2% установить пользователя =% 2 set user =% user: "=% набор вызовов user = %% user: *% USERDOMAIN% \ = %% @echo% comp%% user%
Этот скрипт использует PsLoggedOn .
Я записываю имя пользователя в свойство описания компьютера с помощью сценария входа, который позволяет мне видеть все в AD Users & Computers, выполнять поиск по нему и так далее. Очень кстати.
Если на серверах запущены службы терминалов, вы можете использовать диспетчер служб терминалов для просмотра серверов в домене и того, кто на них вошел. Это GUI и его можно найти под
Start -> Administrative Tools -> Terminal Services Manager
Вы можете обнаружить, что пользователь локально вошел на рабочую станцию, запросив WMI с помощью следующего сценария PowerShell. Он возвращает имя того, кто вошел в систему локально или пустую строку.
function logged_in($host_name) {
(get-wmiobject -class Win32_ComputerSystem -computername $host_name `
-namespace "root\CIMV2").UserName
}
Я не уверен, где я взял это, но у меня есть этот код, который показывает пользователей на машине. Вы можете обернуть это в каждый цикл для сканирования группы машин. Я бы сказал, что если вы хотите узнать, кто вошел в систему, самый простой способ - включить аудит входа в систему и посмотреть (или запросить) журнал безопасности. Вот код, чтобы увидеть, кто в данный момент:
' PARAMETERS
'
strComputer = "machineName" ' use "." for local computer
strUser = "domain\user" ' comment this line for current user
strPassword = "password" ' comment this line for current user
' CONSTANTS
'
wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6
'=======================================================================
' MAIN
'=======================================================================
' Connect to machine
'
If Not strUser = "" Then
' Connect using user and password
'
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMI = objLocator.ConnectServer _
(strComputer, "root\cimv2", strUser, strPassword)
objWMI.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
objWMI.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy
Else
' Connect using current user
'
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
End If
' Get OS name
'
Set colOS = objWMI.InstancesOf ("Win32_OperatingSystem")
For Each objOS in colOS
strName = objOS.Name
Next
If Instr(strName, "Windows 2000") > 0 Then
'-------------------------------------------------------------------
' Code for Windows 2000
'-------------------------------------------------------------------
' Get user name
'
Set colComputer = objWMI.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer
Wscript.Echo "User: " & objComputer.UserName
Next
' ------------------------------------------------------------------
Else
' ------------------------------------------------------------------
' Code for Windows XP or later
' ------------------------------------------------------------------
' Get interactive session
'
Set colSessions = objWMI.ExecQuery _
("Select * from Win32_LogonSession Where LogonType = 2")
If colSessions.Count = 0 Then
' No interactive session found
'
Wscript.Echo "No interactive user found"
Else
'Interactive session found
'
For Each objSession in colSessions
Set colList = objWMI.ExecQuery("Associators of " _
& "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
& "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )
' Show user info
'
For Each objItem in colList
WScript.Echo "User: " & objItem.Name
WScript.Echo "FullName: " & objItem.FullName
WScript.Echo "Domain: " & objItem.Domain
Next
' Show session start time
'
Wscript.Echo "Start Time: " & objSession.StartTime
Next
End If
' ------------------------------------------------------------------
End If
'=======================================================================
Я удивлен, что никто еще не упомянул loggedon2, которым я пользуюсь уже несколько лет. Это реализация GUI, о которой вы просили, и она доступна здесь .