Rileva chi ha effettuato l'accesso a macchine Windows remote


9

Come scopri chi è connesso ai computer remoti di Windows?

Sto usando psloggedon al momento, ma mi dà solo un computer alla volta.

psloggeon \\ 172.21.0.5

PsLoggedOn

C'è un modo migliore come scansionare un'intera sottorete? Preferibilmente qualche applicazione GUI.

Risposte:


9

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.


Bene, ma il problema è che prova ogni indirizzo IP. Se un host non è attivo, rimane bloccato per circa 30 secondi prima di continuare. L'output è anche un po 'disordinato.
Jindrich,

potresti fare un ping contro la macchina (ping xxxx -n 1) e controllarne l'output, in questo modo il tuo timeout su qualsiasi macchina è di un secondo per il ping
benPearce

8

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 .



2

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.


1

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

1

qwinsta è un altro comando dos, ma ti darà comunque solo uno alla volta ...

C:\>qwinsta /server:test_srv
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 console           test_usr                  0  Active  wdcon
 rdp-tcp                                 65536  Listen  rdpwd

1

È 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
}

0

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

'=======================================================================

0

Sono sorpreso che nessuno abbia ancora menzionato loginon2, che utilizzo da diversi anni. È l'implementazione della GUI che hai richiesto ed è disponibile qui .


Quando eseguo questo su Windows 7, ricevo l'errore: Errore - Uscita. Impossibile trovare il punto di ingresso per ServerBrowseDialogA0. Forse non funziona su Win7? Hai bisogno dei diritti di amministratore per eseguirlo senza errori?
Steve,

@Steve, ora so perché nessun altro l'ha pubblicato. Hai ragione, non funziona su Win 7, almeno non sulla versione a 64 bit. Vedrò se riesco a copiare le DLL richieste da un computer XP e farlo funzionare. Ti farò sapere se ho successo.
John Gardeniers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.