Odpowiedzi:
nie GUI, ale:
for /L %x in (2,1,254) do psloggedon \\172.21.0.%x
wykona skanowanie z 172.21.0.2-254. Możesz także zagnieżdżać:
for /L %z in (16,1,31) do for /L %x in (1,1,254) do psloggedon \\172.21.%y.%x
Spowoduje to przeskanowanie podsieci 172.21. {16-31} .x.
Znalazłem ten skrypt . Skanuje całą domenę i daje ładne wyjście (nazwa komputera i nazwa użytkownika).
whoisloggedinwhere.bat> users.txt
@echo wyłączone 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% \"') zrobić ( połączenie: zgłoś %% c "%% u" ) ) endlocal goto: EOF :raport ustaw pracę =% 1 ustaw comp =% pracy: ~ 2% ustaw użytkownika =% 2 ustaw użytkownik =% użytkownik: "=% zestaw połączeń użytkownik = %% użytkownik: *% USERDOMAIN% \ = %% @echo% comp%% user%
Ten skrypt używa PsLoggedOn .
Zapisuję nazwę użytkownika we właściwości opisu komputera za pomocą skryptu logowania, który pozwala mi zobaczyć wszystko w AD Użytkownicy i komputery, wyszukiwać i tak dalej. Bardzo przydatny.
Jeśli na serwerach działają Usługi terminalowe, możesz użyć Menedżera usług terminalowych, aby wyświetlić serwery w domenie i kto jest do nich zalogowany. Jest to GUI i można je znaleźć pod
Start -> Administrative Tools -> Terminal Services Manager
Możesz wykryć, że użytkownik jest lokalnie zalogowany na stacji roboczej, wysyłając zapytanie do WMI za pomocą następującego skryptu PowerShell. Zwraca nazwę tego, kto jest zalogowany lokalnie lub pusty ciąg.
function logged_in($host_name) {
(get-wmiobject -class Win32_ComputerSystem -computername $host_name `
-namespace "root\CIMV2").UserName
}
Nie jestem pewien, skąd go mam, ale mam ten kod, który pokazuje użytkowników na komputerze. Możesz zawinąć to w każdą pętlę, aby przeskanować kilka komputerów. Powiedziałbym, że jeśli chcesz wiedzieć, kto zalogował się do systemu, najprostszym sposobem jest włączenie kontroli logowania i sprawdzenie (lub zapytanie) dziennika bezpieczeństwa. Oto kod, aby zobaczyć, kto jest włączony w danym momencie:
' 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
'=======================================================================
Dziwię się, że nikt jeszcze nie wspomniał o loggedon2, z którego korzystam od kilku lat. To implementacja GUI, o którą prosiłeś i jest dostępna tutaj .