Detectar quem está conectado a máquinas Windows remotas

9

Como você descobre quem está conectado a máquinas Windows remotas?

Estou usando o psloggedon no momento, mas ele me fornece apenas um computador por vez.

psloggeon \\ 172.21.0.5

psloggedon

Existe uma maneira melhor de verificar uma sub-rede inteira? De preferência, algum aplicativo GUI.

Jindrich
fonte

Respostas:

9

não é uma GUI, mas:

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

fará uma varredura de 172.21.0.2-254. Você também pode aninhar:

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

Isso examinará as sub-redes 172.21. {16-31} .x.

Kevin M
fonte
Bom, mas o problema é que ele tenta todos os endereços IP. Se um host não está ativo, ele fica parado por 30 segundos ou mais antes de continuar. A saída também é um pouco confusa.
Jindrich
você poderia fazer um ping contra a máquina (ping xxxx -n 1) e verifique a sua saída, dessa forma o seu tempo limite contra qualquer máquina é de um segundo para o ping
benPearce
8

Eu encontrei esse script . Ele verifica um domínio inteiro e fornece uma boa saída (nome do computador e nome do usuário).

whoisloggedinwhere.bat> users.txt

@echo off
setlocal
para / f "Tokens = 1" %% c in ('exibição / domínio líquido: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do (
 para / f "Tokens = *" %% u em ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do (
  chamada: relatório %% c "%% u"
 )
)
endlocal
ir para: EOF
:relatório
definir trabalho =% 1
definir comp =% trabalho: ~ 2%
definir usuário =% 2
definir usuário =% usuário: "=%
usuário do conjunto de chamadas = %% user: *% USERDOMAIN% \ = %%
@echo% comp%% user%

Este script usa PsLoggedOn .

Jindrich
fonte
2

Tentar nbtstat -a <computername>

PowerApp101
fonte
Você fez duas perguntas. Isso responde ao seu primeiro.
PowerApp101
2

Escrevo o nome do usuário na propriedade de descrição do computador usando um script de logon, que permite ver tudo em Usuários e Computadores do AD, fazer pesquisas nele e assim por diante. Muito conveniente.

Maximus Minimus
fonte
1

Se os servidores estiverem executando os Serviços de Terminal, você poderá usar o Gerenciador de Serviços de Terminal para exibir os servidores em um domínio e quem está conectado a eles. É GUI e pode ser encontrado em

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

O qwinsta é outro comando do DOS, mas ainda lhe dará um de cada vez ...

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

Você pode detectar um usuário conectado localmente a uma estação de trabalho consultando o WMI por meio do seguinte script do PowerShell. Retorna o nome de quem está conectado localmente ou a sequência vazia.

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

Não tenho certeza de onde consegui, mas tenho esse código que mostra os usuários em uma máquina. Você pode agrupar isso em um loop para cada loop para varrer várias máquinas. Eu diria que, se você quiser saber quem está conectado a um sistema, a maneira mais simples é ativar a auditoria de login e examinar (ou consultar) o log de segurança. Aqui está o código para ver quem está a qualquer 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

'=======================================================================
Jim B
fonte
0

Estou surpreso que ninguém tenha mencionado o logon2 ainda, o que venho usando há alguns anos. É a implementação da GUI que você solicitou e está disponível aqui .

John Gardeniers
fonte
Quando executo isso no Windows 7, recebo o erro: Erro - Sair. Não foi possível encontrar o ponto de entrada para ServerBrowseDialogA0. Talvez não seja executado no Win7? Você precisa de direitos de administrador para executá-lo sem erro?
Steve
@ Steve, agora eu sei por que mais ninguém postou. Você está certo, ele não funciona no Windows 7, pelo menos não na versão de 64 bits. Vou ver se consigo copiar as DLLs necessárias de uma máquina XP e fazê-la funcionar. Avisarei se tiver algum sucesso.
John Gardeniers