문제

우리 제품에서는 현재 사용자가 Windows(특히 Vista)에 로그온한 기간을 확인해야 할 필요성이 생겼습니다.이에 대한 직접적인 API 기능은 없는 것 같고 WMI와 관련된 내용을 찾을 수 없습니다. (비록 저는 WMI 전문가가 아니므로 뭔가를 놓쳤을 수도 있습니다.)

어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

나처럼 WMI에 익숙하지 않은 사람들을 위한 링크는 다음과 같습니다.

다음은 VBS에서 Win32_Session을 쿼리하는 예입니다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set sessions = objWMIService.ExecQuery _
   ("select * from Win32_Session")

For Each objSession in sessions
   Wscript.Echo objSession.StartTime
Next

내 개인 컴퓨터에 대해 6개 세션에 대해 경고합니다. 아마도 LogonType을 기준으로 필터링하여 실제("대화형") 사용자만 나열할 수 있습니다."현재 사용자"의 세션을 선택하는 방법을 알 수 없습니다.

[편집] 문제에 대한 Google의 결과는 다음과 같습니다. http://forum.sysinternals.com/forum_posts.asp?TID=3755

다른 팁

Powershell 및 WMI에서 다음 한 줄 명령은 사용자와 로그온 시간을 보여주는 개체 목록을 반환합니다.

Get-WmiObject win32_networkloginprofile | ? {$_.lastlogon -ne $null} | % {[PSCustomObject]@{User=$_.caption; LastLogon=[Management.ManagementDateTimeConverter]::ToDateTime($_.lastlogon)}}

설명:

  • WMI에서 로그인한 사용자 목록 검색
  • 대화형이 아닌 사용자를 필터링합니다(효과적으로 제거 NT AUTHORITY\SYSTEM)
  • 가독성을 위해 사용자 및 로그온 시간 형식을 다시 지정합니다.

참고자료:

WMI에서는 다음을 수행합니다."SELECT * FROM WIN32_SESSION"에서 "STARTTIME"값이 있습니다.

도움이 되길 바랍니다.

WMI를 사용하면 Win32Session이 좋은 시작이 됩니다.또한 네트워크에 있는 경우 Win32_NetworkLoginProfile을 사용하여 모든 종류의 정보를 얻을 수 있다는 점도 지적해야 합니다.

Set logins = objWMIService.ExecQuery _
   ("select * from Win32_NetworkLoginProfile")
For Each objSession in logins
   Wscript.Echo objSession.LastLogon
Next

수집할 수 있는 기타 정보에는 사용자 이름, 마지막 로그오프 및 다양한 프로필 관련 정보가 포함됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top