Войти

Показать полную графическую версию : Время входа в систему


Jeesus
28-02-2010, 01:48
Доброго времени суток!
Подскажите плз как получить время входа в систему?

Petya V4sechkin
28-02-2010, 09:38
Jeesus, если VBS устроит:
Set wshNetwork = CreateObject("WScript.Network")
strUser = LCase(wshNetwork.UserDomain & "\" & wshNetwork.UserName)

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

Set colSession = objWMI.ExecQuery("SELECT * FROM Win32_LogonSession" _
& " WHERE LogonType = 2 OR LogonType = 10")

For Each objSession In colSession
Set colUser = objWMI.ExecQuery("ASSOCIATORS OF" _
& " {Win32_LogonSession.LogonId=" & objSession.LogonId & "}" _
& " WHERE AssocClass=Win32_LoggedOnUser Role=Dependent")

For Each objUser In colUser
If LCase(objUser.Domain & "\" & objUser.Name) = strUser Then
Wscript.Echo "Время входа: " & WMIDateStringToDate(objSession.StartTime)
End If
Next
Next

Function WMIDateStringToDate(dtmStart)
WMIDateStringToDate = CDate( _
Mid(dtmStart, 5, 2) & "/" & _
Mid(dtmStart, 7, 2) & "/" & _
Left(dtmStart, 4) & " " & _
Mid (dtmStart, 9, 2) & ":" & _
Mid(dtmStart, 11, 2) & ":" & _
Mid(dtmStart, 13, 2))
End Function

Если имелось в виду время запуска системы:
strComputer = "."
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colOS = objWMI.ExecQuery("SELECT LastBootUpTime FROM Win32_OperatingSystem")
For Each objOS In colOS
Wscript.Echo "Время запуска ОС: " & WMIDateStringToDate(objOS.LastBootUpTime)
Next

Function WMIDateStringToDate(dtmStart)
WMIDateStringToDate = CDate( _
Mid(dtmStart, 5, 2) & "/" & _
Mid(dtmStart, 7, 2) & "/" & _
Left(dtmStart, 4) & " " & _
Mid (dtmStart, 9, 2) & ":" & _
Mid(dtmStart, 11, 2) & ":" & _
Mid(dtmStart, 13, 2))
End Function

amel27
01-03-2010, 11:06
то же самое через CMD:

@Echo Off

For /F "Skip=1 Delims=" %%i In ('WMIC Path Win32_LoggedOnUser GET') Do CALL :PARSE %%i
Exit

:PARSE
For /F "UseBackQ Skip=1 Tokens=1* Delims=." %%i In (
`2^>Nul WMIC LOGON Where 'LogonId^="%~6" And ^(LogonType^=2 Or LogonType^=10^)' Get StartTime`
) Do If Not "%%j"=="" Set STime=%%i

If Defined STime ^
Echo %STime:~6,2%.%STime:~4,2%.%STime:~0,4% %STime:~8,2%:%STime:~10,2%:%STime:~12,2% %~2\%~4
Set STime=& GoTo :EOF


P.S. по ходу обнаружил, что одновременно могут висеть несколько интерактивных сеансов (LogonType=2), поэтому и пришлось оставить вывод списком - может кто в курсе что бы это значило?.. машина XP в домене, так что переключение пользователей не должно влиять... :unsure:

amel27
01-03-2010, 12:52
на сервере можно определить через Query User (http://technet.microsoft.com/en-us/library/cc788125(WS.10,printer).aspx)/QUser, эту утилиту можно скопировать и на станцию:
@Echo Off

For /F "Skip=1 Tokens=1*" %%i In ('Query User "%UserName%"') Do Set $L=%%j
Echo %$L:~-16%

NiOl
01-03-2010, 14:47
на сервере можно определить через Query User/QUser, эту утилиту можно скопировать и на станцию: »

У меня почему-то это давно не работает. :(

а список из LogonType у меня 0,2,3,5 - 10 го нет.

amel27
02-03-2010, 03:29
У меня почему-то это давно не работает. »
не сталкивался, в чем это выражается - не работает утилита или не показывает дату?

10 го нет »
это удаленные терминальные подключения, для XP их нет




© OSzone.net 2001-2012