Detecta quién inició sesión en máquinas remotas de Windows

9

¿Cómo saber quién ha iniciado sesión en máquinas remotas de Windows?

Estoy usando psloggedon en este momento, pero solo me da una computadora a la vez.

psloggeon \\ 172.21.0.5

psloggedon

¿Hay una mejor manera de escanear una subred completa? Preferiblemente alguna aplicación GUI.

Jindrich
fuente

Respuestas:

9

no una GUI, pero:

for /L %x in (2,1,254) do psloggedon \\172.21.0.%x

realizará un escaneo desde 172.21.0.2-254. También puedes anidar:

for /L %z in (16,1,31) do for /L %x in (1,1,254)  do psloggedon \\172.21.%y.%x

Esto escaneará las subredes 172.21. {16-31} .x.

Kevin M
fuente
Bien, pero el problema es que prueba todas las direcciones IP. Si un host no está activo, se cuelga allí durante 30 segundos más o menos antes de continuar. La salida también es un poco desordenada.
Jindrich
usted podría hacer un ping contra la máquina (ping xxxx -n 1) y comprobar su salida, de esa manera el tiempo de espera en contra de cualquier máquina es de un segundo para el ping
benPearce
8

Encontré este guión . Escanea un dominio completo y le da una buena salida (nombre de la computadora y nombre de usuario).

whoisloggedinwhere.bat> users.txt

@echo off
setlocal
para / f "Tokens = 1" %% c in ('net view / domain: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do (
 para / f "Tokens = *" %% u in ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do (
  llamada: informe %% c "%% u"
 )
)
endlocal
ir a: EOF
:reporte
establecer trabajo =% 1
set comp =% trabajo: ~ 2%
establecer usuario =% 2
establecer usuario =% usuario: "=%
conjunto de llamadas usuario = %% usuario: *% USERDOMAIN% \ = %%
@echo% comp%% user%

Este script usa PsLoggedOn .

Jindrich
fuente
2

Tratar nbtstat -a <computername>

PowerApp101
fuente
Hiciste 2 preguntas. Esto responde a tu primero.
PowerApp101
2

Escribo el nombre de usuario en la propiedad de descripción de la computadora usando un script de inicio de sesión, que me permite ver todo en AD Users & Computers, hacer búsquedas en él, etc. Muy útil.

Maximus Minimus
fuente
1

Si los servidores ejecutan Servicios de Terminal Server, puede usar el Administrador de Servicios de Terminal Server para ver los servidores de un dominio y quién inició sesión en ellos. Es GUI y se puede encontrar en

Start -> Administrative Tools -> Terminal Services Manager
Justin Scott
fuente
1

qwinsta es otro comando dos, pero todavía solo te dará uno a la vez ...

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

Puede detectar que un usuario haya iniciado sesión localmente en una estación de trabajo consultando WMI a través del siguiente script de PowerShell. Devuelve el nombre de quien inició sesión localmente o la cadena vacía.

function logged_in($host_name) {
    (get-wmiobject -class Win32_ComputerSystem -computername $host_name `
        -namespace "root\CIMV2").UserName
}
Michael Steele
fuente
0

No estoy seguro de dónde lo obtuve, pero tengo este código que muestra a los usuarios en una máquina. Puede ajustar esto en cada ciclo para escanear un montón de máquinas. Diría que si desea saber quién inició sesión en un sistema, la forma más sencilla es activar la auditoría de inicio de sesión y consultar (o consultar) el registro de seguridad. Aquí está el código para ver quién está en un momento dado:

' 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

'=======================================================================
Jim B
fuente
0

Me sorprende que nadie haya mencionado el loginon2 todavía, que he estado usando durante bastantes años. Es la implementación de la GUI que solicitó y está disponible aquí .

John Gardeniers
fuente
Cuando ejecuto esto en Windows 7, recibo el error: Error - Salir. No se pudo encontrar el punto de entrada para ServerBrowseDialogA0. Tal vez no se ejecuta en Win7? ¿Necesita derechos de administrador para ejecutarlo sin error?
Steve
@ Steve, ahora sé por qué nadie más lo publicó. Tienes razón, no funciona en Win 7, al menos no en la versión de 64 bits. Voy a ver si puedo copiar los archivos DLL necesarios de una máquina XP y hacer que funcione. Te haré saber si tengo algún éxito.
John Gardeniers