명령 줄에서 현재 Windows 워크 스테이션에 로그온 한 사람을 확인하는 방법은 무엇입니까?


37

환경은 도메인에 있고 서버는 Windows Server 2003이며 워크 스테이션에는 Vista 및 XP가 설치되어 있습니다.
sysinternals 또는 타사 프로그램이없는 간단한 명령 줄에서 워크 스테이션에 현재 로그온 한 사람을 원격으로 확인하는 방법이 필요합니다.

감사

답변:


47

이것은 원래 소스 였지만 이제는 404입니다.

그들은 Windows에서 사용할 수있는 (Windows Management Interface Command) WMIC 사용을 제안했습니다.

WMIC /NODE: xxx.xxx.xxx.xxx COMPUTERSYSTEM GET USERNAME 

현재 xxx.xxx.xxx.xxx에 로그인 한 사용자 이름을 반환하거나

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

현재 "workstation_name"에 로그인 한 사용자 이름을 반환합니다

업데이트 : 원격 컴퓨터의 관리자 인 경우 Windows 10에서도 작동합니다.


이 명령을 원격으로 또는 로컬로 실행하면 UserName해당 시스템에 로그인 한 경우에도 아무것도 표시되지 않은 한 줄의 출력 " "만 표시됩니다.
Dai

@Dai XP 또는 Vista 또는 2003을 사용하고 있습니까? 이 질문은 그 os에 대한 것이 었습니다
Preet Sangha

17

죄송합니다. Sysinternals를 사용하고 싶지 않다는 것을 알지 못했습니다.
이제는 Microsoft technet 도구입니다. 특별한 이유가 없습니까? Mark Russinovich 가 Microsoft로
이전하기 전에 다른 타사 도구보다 Sysinternals를 선호했습니다 .


마이크로 소프트 시스 인 터널 스위트라는 도구가 Psloggedon을 ,

psloggedon.exe -l

또한이 NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme

3
sysinternals는 단지 비즈니스입니다. 나는 그들이 Mark에게 거기에 가기 위해 많은 돈을 지불했으면 좋겠다. 현재는 그가 이전에하던 훌륭한 일을 계속하지 못하도록 막지 않았다.
gbjbaanb 2016 년

@ gbjbaanb, 나는 그것에 대해 행복합니다. 그가 계속 스위트 룸에 업데이트하고 추가하기를 바랍니다.
nik

1
WMIC수락 된 답변에서 RPC가 실행 중이 아니라고 불평하는 반면, 이것은 놀라운 일 이었습니다. 그것은 지금 열려고 싶지 않은 새로운 웜 캔이므로 psloggedon에 체크인하여 매우 기쁩니다.
Mike S

12

win32_loggedonuser를 사용했지만 둘 이상의 도메인 사용자 가 반환 되는 문제가 발생 하여 내 목적으로는 작동하지 않습니다. 대신 나는 (powershell에서)

#Get Currently logged in user
$ExplorerProcess = gwmi win32_process | where name -Match explorer

if($ExplorerProcess.getowner().user.count -gt 1){
    $LoggedOnUser = $ExplorerProcess.getowner().user[0]
}

else{
    $LoggedOnUser = $ExplorerProcess.getowner().user
}

경우에 따라 getowner가 어떤 이유로 여러 사용자를보고하기 때문에 이유를 모르지만 제 경우에는 동일한 사용자이므로 문제가되지 않았습니다.


2
그 이유는 여러 사용자가 로그인했을 수 있기 때문입니다. 몇 년 전에 빠른 사용자 전환 등이 도입되었습니다. 다른 사용자는 계속 로그온하지 않습니다.
TomTom

좋은 점 @TomTom, 나는 그것에 대해 잊어 버렸습니다. [win32_loggedonuser]도 psexec'd 또는 powershell에 들어간 사람을 반환 할 것이라고 생각합니다.
MDMoore313

6

이 정보는 win32_loggedonuser에서 얻을 수 있습니다.

에서 이 페이지 :

strComputer = "."   ' " use "." for local computer

Set objWMI = GetObject("winmgmts:" _
              & "{impersonationLevel=impersonate}!\\" _
              & strComputer & "\root\cimv2")

Set colSessions = objWMI.ExecQuery _
    ("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10")

If colSessions.Count = 0 Then
   Wscript.Echo "No interactive users found"
Else
   For Each objSession in colSessions
     If objSession.LogonType = 2 Then
       WScript.Echo "Logon type: Console"
     Else
       WScript.Echo "Logon type: RDP/Terminal Server"
     End If
     Set colList = objWMI.ExecQuery("Associators of " _
         & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
         & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )

     For Each objItem in colList
       WScript.Echo "User: " & objItem.Name
       WScript.Echo "FullName: " & objItem.FullName
       WScript.Echo "Domain: " & objItem.Domain
     Next
     Wscript.Echo "Session start time: " & objSession.StartTime
     WScript.Echo
   Next
End If
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.