تحديد كم من الوقت المستخدم هو تسجيل الدخول إلى Windows
-
08-06-2019 - |
سؤال
نشأت حاجة في منتجاتنا ، لتحديد كم من الوقت الحالي المستخدم تسجيل الدخول إلى Windows (على وجه التحديد, Vista).يبدو أنه لا يوجد على التوالي إلى الأمام API وظيفة هذا وأنا لا يمكن أن تجد أي شيء ذات الصلة مع WMI (على الرغم من أنني لست خبيرا مع WMI لذا قد غاب عن شيء).
أي أفكار ؟
المحلول
الناس لم تكن مألوفة مع WMI (مثلي) ، وهنا بعض الروابط:
- MSDN الصفحة على استخدام WMI من لغات مختلفة: http://msdn.microsoft.com/en-us/library/aa393964(مقابل.85).aspx
- مرجع عن Win32_Session: http://msdn.microsoft.com/en-us/library/aa394422(مقابل.85).aspx, لكن الكائنات في Win32_session هي من نوع Win32_LogonSession (http://msdn.microsoft.com/en-us/library/aa394189(مقابل.85).aspx) الذي لديه المزيد من الخصائص المثيرة للاهتمام.
- WMI Explorer - أداة يمكنك استخدامها بسهولة تشغيل الاستعلامات مثل ميكال نشرها.
وهنا مثال الاستعلام عن Win32_Session من VBS:
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 فقط قائمة الحقيقي ("التفاعلية") المستخدمين.لم أستطع أن أرى كيف يمكنك اختيار الدورة من "المستخدم الحالي".
[تحرير] وهنا النتيجة من جوجل مشكلتك: 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 يعترض على استخدام: https://forum.sysinternals.com/topic3755.html
- تنسيق التاريخ/الوقت: https://blogs.msdn.microsoft.com/powershell/2009/08/12/get-systemuptime-and-working-with-the-wmi-date-format/
في WMI القيام به:"حدد * من 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
أجزاء أخرى من المعلومات التي يمكن أن تجمع تشمل اسم المستخدم الماضي تسجيل الخروج, وكذلك الشخصية المختلفة ذات الصلة الأشياء.