Risposte:
non una GUI, ma:
for /L %x in (2,1,254) do psloggedon \\172.21.0.%x
eseguirà una scansione da 172.21.0.2-254. Puoi anche nidificare:
for /L %z in (16,1,31) do for /L %x in (1,1,254) do psloggedon \\172.21.%y.%x
Questo eseguirà la scansione delle sottoreti 172.21. {16-31} .x.
Ho trovato questo script . Esegue la scansione di un intero dominio e ti dà un output piacevole (nome del computer e nome utente).
whoisloggedinwhere.bat> users.txt
@echo off setlocal per / f "Token = 1" %% c in ('net view / domain: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do ( per / f "Token = *" %% u in ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do ( chiama: segnala %% c "%% u" ) ) endlocal vai: EOF :rapporto imposta lavoro =% 1 set comp =% lavoro: ~ 2% imposta utente =% 2 imposta utente =% utente: "=% call set user = %% user: *% USERDOMAIN% \ = %% @echo% comp%% user%
Questo script utilizza PsLoggedOn .
Scrivo il nome utente nella proprietà della descrizione del computer usando uno script di accesso, che mi consente di vedere tutto in Utenti e computer AD, fare ricerche su di esso e così via. Molto maneggevole.
Se i server eseguono Servizi terminal, è possibile utilizzare Gestione servizi terminal per visualizzare i server in un dominio e chi è connesso ad essi. È la GUI e può essere trovata sotto
Start -> Administrative Tools -> Terminal Services Manager
È possibile rilevare un utente che accede localmente a una workstation interrogando WMI tramite il seguente script PowerShell. Restituisce il nome di chiunque sia connesso localmente o la stringa vuota.
function logged_in($host_name) {
(get-wmiobject -class Win32_ComputerSystem -computername $host_name `
-namespace "root\CIMV2").UserName
}
Non sono sicuro di dove l'ho preso, ma ho questo codice che mostra gli utenti su una macchina. Puoi avvolgerlo in a per ogni ciclo per scansionare un gruppo di macchine. Direi che se vuoi sapere chi ha effettuato l'accesso a un sistema, il modo più semplice è attivare il controllo di accesso e consultare (o interrogare) il registro di sicurezza. Ecco il codice per vedere chi c'è in un dato momento:
' 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
'=======================================================================
Sono sorpreso che nessuno abbia ancora menzionato loginon2, che utilizzo da diversi anni. È l'implementazione della GUI che hai richiesto ed è disponibile qui .