원격 Windows 시스템에 로그온 한 사람 감지


9

원격 Windows 시스템에 누가 로그온했는지 어떻게 알 수 있습니까?

현재 psloggedon 을 사용 하고 있지만 한 번에 하나의 컴퓨터 만 제공합니다.

psloggeon \\ 172.21.0.5

psloggedon

전체 서브넷을 스캔하는 더 좋은 방법이 있습니까? 바람직하게는 일부 GUI 애플리케이션.

답변:


9

GUI가 아니라 :

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

172.21.0.2-254에서 스캔합니다. 당신은 또한 중첩 할 수 있습니다 :

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

172.21. {16-31} .x 서브넷을 스캔합니다.


좋지만 문제는 모든 IP 주소를 시도한다는 것입니다. 호스트가 활성화되어 있지 않으면 계속하기 전에 30 초 정도 정지합니다. 출력도 약간 지저분합니다.
Jindrich 2016 년

기계에 대해 핑을 수행하고 (ping xxxx -n 1) 출력을 확인할 수 있습니다. 이렇게하면 기계에 대한 시간 초과가 핑에 대해 1 초가됩니다.
benPearce

8

이 스크립트를 찾았습니다 . 그것은 전체 도메인을 스캔하고 좋은 결과 (컴퓨터 이름 및 사용자 이름)를 제공합니다.

whoisloggedinwhere.bat> users.txt

@ 에코 오프
setlocal
( 'net view / domain : "% USERDOMAIN %"^ | Findstr / L / C : "\\"')에서 / f "토큰 = 1"%% c의 경우
 / f "토큰 = *"%% u in ( 'PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN % \"' ')
  전화 :보고 %% c "%% u"
 )
)
지역
고토 : EOF
:보고서
작업 설정 = % 1
comp = % work 설정 : ~ 2 %
사용자 설정 = % 2
사용자 설정 = % 사용자 : "= %
통화 세트 사용자 = %% user : * % USERDOMAIN % \ = %%
@echo % comp % % user %

이 스크립트는 PsLoggedOn을 사용 합니다 .



2

로그온 스크립트를 사용하여 컴퓨터 설명 속성에 사용자 이름을 작성하여 AD 사용자 및 컴퓨터의 모든 내용을보고 검색 할 수 있습니다. 매우 편리합니다.


1

서버에서 터미널 서비스를 실행중인 경우 터미널 서비스 관리자를 사용하여 도메인의 서버와 누가 로그온했는지 확인할 수 있습니다. GUI이며 아래에서 찾을 수 있습니다

Start -> Administrative Tools -> Terminal Services Manager

1

qwinsta는 또 다른 dos 명령이지만 여전히 한 번에 하나씩 만 제공합니다 ...

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

1

다음 PowerShell 스크립트를 통해 WMI를 쿼리하여 워크 스테이션에 로컬로 로그온 한 사용자를 감지 할 수 있습니다 . 로컬로 로그온 한 사람의 이름이나 빈 문자열을 반환합니다.

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

0

어디에서 얻었는지 잘 모르겠지만이 코드를 배치하여 사용자를 컴퓨터에서 보여줍니다. 이것을 루프마다 감싸서 여러 머신을 스캔 할 수 있습니다. 누가 시스템에 로그온했는지 알고 싶다면 가장 간단한 방법은 로그인 감사를 설정하고 보안 로그를 확인 (또는 쿼리)하는 것입니다. 주어진 순간에 누가 있는지 확인하는 코드는 다음과 같습니다.

' 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

아직 몇 년 동안 사용해온 logon2에 대해 언급 한 사람이 아무도 없습니다. 요청한 GUI 구현이며 여기서 사용할 수 있습니다 .


Windows 7에서 이것을 실행하면 오류-종료 중 오류가 발생합니다. ServerBrowseDialogA0에 대한 진입 점을 찾을 수 없습니다. 아마도 Win7에서 실행되지 않습니까? 오류없이 실행하려면 관리자 권한이 필요합니까?
Steve

@Steve, 이제 아무도 다른 사람이 게시하지 않은 이유를 알고 있습니다. 맞습니다, 적어도 64 비트 버전이 아닌 Win 7에서는 작동하지 않습니다. XP 컴퓨터에서 필요한 DLL을 복사하여 작동시킬 수 있는지 확인하겠습니다. 성공하면 알려 드리겠습니다.
John Gardeniers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.