Ermitteln Sie, wer an Remote-Windows-Computern angemeldet ist


9

Wie finden Sie heraus, wer an Remote-Windows-Computern angemeldet ist?

Ich verwende momentan psloggedon , aber es gibt mir jeweils nur einen Computer.

psloggeon \\ 172.21.0.5

psloggedon

Gibt es eine bessere Möglichkeit, ein ganzes Subnetz zu scannen? Vorzugsweise eine GUI-Anwendung.

Antworten:


9

keine GUI, aber:

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

führt einen Scan von 172.21.0.2-254 durch. Sie können auch verschachteln:

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

Dadurch werden die Subnetze 172.21. {16-31} .x gescannt.


Gut, aber das Problem ist, dass es jede IP-Adresse versucht. Wenn ein Host nicht aktiv ist, bleibt er dort etwa 30 Sekunden lang hängen, bevor er fortgesetzt wird. Die Ausgabe ist auch etwas chaotisch.
Jindrich

Sie können einen Ping gegen die Maschine durchführen (Ping xxxx -n 1) und deren Ausgabe überprüfen. Auf diese Weise beträgt Ihre Zeitüberschreitung für jede Maschine eine Sekunde für den Ping
benPearce

8

Ich habe dieses Skript gefunden . Es scannt eine ganze Domain und gibt Ihnen eine schöne Ausgabe (Computername und Benutzername).

whoisloggedinwhere.bat> users.txt

@echo aus
setlocal
für / f "Tokens = 1" %% c in ('net view / domain: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do (
 für / f "Tokens = *" %% u in ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do (
  call: report %% c "%% u"
 )
)
endlokal
gehe zu: EOF
:Bericht
Arbeit einstellen =% 1
setze comp =% work: ~ 2%
setze Benutzer =% 2
set user =% user: "=%
call set user = %% user: *% USERDOMAIN% \ = %%
@echo% comp %% user%

Dieses Skript verwendet PsLoggedOn .



2

Ich schreibe den Benutzernamen mithilfe eines Anmeldeskripts in die Computerbeschreibungseigenschaft, mit dem ich alles in AD-Benutzer und -Computer anzeigen, danach suchen usw. kann. Sehr praktisch.


1

Wenn auf den Servern Terminaldienste ausgeführt werden, können Sie mit dem Terminaldienstemanager die Server in einer Domäne anzeigen und festlegen, wer bei ihnen angemeldet ist. Es ist GUI und kann unter gefunden werden

Start -> Administrative Tools -> Terminal Services Manager

1

qwinsta ist ein weiterer dos-Befehl, der Ihnen jedoch immer nur einen Befehl gibt ...

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

1

Sie können einen Benutzer erkennen, der lokal an einer Workstation angemeldet ist, indem Sie WMI über das folgende PowerShell-Skript abfragen. Es gibt den Namen des lokal angemeldeten Benutzers oder die leere Zeichenfolge zurück.

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

0

Ich bin nicht sicher, woher ich es habe, aber ich habe diesen Code herumliegen, der Benutzer auf einem Computer zeigt. Sie können dies für jede Schleife in eine einschließen, um eine Reihe von Maschinen zu scannen. Ich würde sagen, wenn Sie wissen möchten, wer an einem System angemeldet ist, ist es am einfachsten, die Anmeldeüberwachung zu aktivieren und das Sicherheitsprotokoll anzuzeigen (oder abzufragen). Hier ist der Code, um zu sehen, wer gerade aktiv ist:

' 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

Ich bin überrascht, dass noch niemand logonon2 erwähnt hat, das ich seit einigen Jahren benutze. Es ist die von Ihnen angeforderte GUI-Implementierung, die hier verfügbar ist .


Wenn ich dies unter Windows 7 ausführe, wird folgende Fehlermeldung angezeigt: Fehler - Beenden. Der Einstiegspunkt für ServerBrowseDialogA0 konnte nicht gefunden werden. Vielleicht läuft es nicht unter Win7? Benötigen Sie Administratorrechte, um es fehlerfrei auszuführen?
Steve

@Steve, jetzt weiß ich, warum es sonst niemand gepostet hat. Sie haben Recht, es funktioniert nicht unter Win 7, zumindest nicht in der 64-Bit-Version. Ich werde sehen, ob ich die erforderlichen DLLs von einem XP-Computer kopieren und zum Laufen bringen kann. Ich werde Sie wissen lassen, ob ich Erfolg habe.
John Gardeniers
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.