Détecter qui est connecté aux machines Windows distantes

9

Comment savoir qui est connecté aux machines Windows distantes?

J'utilise psloggedon pour le moment, mais cela ne me donne qu'un seul ordinateur à la fois.

psloggeon \\ 172.21.0.5

psloggedon

Existe-t-il une meilleure façon de numériser un sous-réseau entier? De préférence une application graphique.

Jindrich
la source

Réponses:

9

pas une interface graphique, mais:

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

fera une analyse de 172.21.0.2-254. Vous pouvez également imbriquer:

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

Cela analysera les sous-réseaux 172.21. {16-31} .x.

Kevin M
la source
Bien, mais le problème est qu'il essaie toutes les adresses IP. Si un hôte n'est pas actif, il se bloque un peu pendant environ 30 secondes avant de continuer. La sortie est également un peu désordonnée.
Jindrich
vous pouvez faire un ping contre la machine (ping xxxx -n 1) et vérifier sa sortie, de cette façon, votre délai d'expiration contre toute machine est d'une seconde pour le ping
benPearce
8

J'ai trouvé ce script . Il scanne tout un domaine et vous donne une belle sortie (nom d'ordinateur et nom d'utilisateur).

whoisloggedinwhere.bat> users.txt

@Écho off
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% \"') do (
  appel: rapport %% c "%% u"
 )
)
endlocal
goto: EOF
:rapport
définir le travail =% 1
définir comp =% travail: ~ 2%
définir l'utilisateur =% 2
définir utilisateur =% utilisateur: "=%
ensemble d'appels utilisateur = %% utilisateur: *% USERDOMAIN% \ = %%
@echo% comp%% user%

Ce script utilise PsLoggedOn .

Jindrich
la source
2

Essayer nbtstat -a <computername>

PowerApp101
la source
Vous avez posé 2 questions. Cela répond à votre premier.
PowerApp101
2

J'écris le nom d'utilisateur dans la propriété de description de l'ordinateur à l'aide d'un script d'ouverture de session, qui me permet de tout voir dans Utilisateurs et ordinateurs AD, d'effectuer des recherches dessus, etc. Très utile.

Maximus Minimus
la source
1

Si les serveurs exécutent les services Terminal Server, vous pouvez utiliser le Gestionnaire des services Terminal Server pour afficher les serveurs d'un domaine et qui y est connecté. C'est GUI et peut être trouvé sous

Start -> Administrative Tools -> Terminal Services Manager
Justin Scott
la source
1

qwinsta est une autre commande dos, mais elle ne vous en donnera qu'une à la fois ...

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

Vous pouvez détecter un utilisateur connecté localement à un poste de travail en interrogeant WMI via le script PowerShell suivant. Il renvoie le nom de la personne connectée localement ou la chaîne vide.

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

Je ne sais pas où je l'ai obtenu mais j'ai ce code qui montre les utilisateurs sur une machine. Vous pouvez envelopper cela dans chaque boucle pour analyser un tas de machines. Je dirais que si vous voulez savoir qui est connecté à un système, le moyen le plus simple consiste à activer l'audit de connexion et à consulter (ou interroger) le journal de sécurité. Voici le code pour voir qui est à tout moment:

' 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
la source
0

Je suis surpris que personne n'ait encore mentionné Logon2, que j'utilise depuis pas mal d'années. C'est l'implémentation de l'interface graphique que vous avez demandée et est disponible ici .

John Gardeniers
la source
Lorsque j'exécute cela sur Windows 7, je reçois l'erreur: Erreur - Quitter. Impossible de trouver le point d'entrée pour ServerBrowseDialogA0. Peut-être qu'il ne fonctionne pas sur Win7? Avez-vous besoin des droits d'administrateur pour l'exécuter sans erreur?
Steve
@Steve, maintenant je sais pourquoi personne d'autre ne l'a posté. Vous avez raison, cela ne fonctionne pas sur Win 7, du moins pas sur la version 64 bits. Je vais voir si je peux copier les DLL requises à partir d'une machine XP et le faire fonctionner. Je vous ferai savoir si j'ai du succès.
John Gardeniers