利用Windows系统日志统计员工每天上下班考勤时间(命令行参数为统计月份):

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Diagnostics;
  6.  
  7. namespace ConsoleSysLogView
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. SystemLog log = new SystemLog();
  14. if (args.Length == )
  15. {
  16. int x = Convert.ToInt32(args[]);
  17. log.PrintEventLog(x);
  18. }
  19. else
  20. {
  21. Console.WriteLine("Event count: " + log.Count);
  22. Console.WriteLine("QueryMessage: SysLogView.exe MonthNum");
  23. }
  24.  
  25. if (Debugger.IsAttached) Console.ReadKey();
  26. }
  27. }
  28.  
  29. public class SystemLog
  30. {
  31. private EventLogEntryCollection _eventCollection;
  32. private EventLog _systemEvent;
  33.  
  34. public SystemLog()
  35. {
  36. _systemEvent = new EventLog();
  37. _systemEvent.Log = "System";
  38. _eventCollection = _systemEvent.Entries;
  39. }
  40.  
  41. public void PrintEventLog(int month)
  42. {
  43. DateTime dateFrom = new DateTime(DateTime.Now.Year, month, );
  44. DateTime dateTo = dateFrom.AddMonths();
  45.  
  46. DateTime dt = dateFrom;
  47. while (dt < dateTo)
  48. {
  49. IList<EventLogEntry> list = Events.Where(a => a.TimeGenerated.Date == dt.Date).OrderBy(a => a.TimeGenerated).ToList();
  50. if (list.Count > )
  51. {
  52. Console.WriteLine();
  53. Console.WriteLine(GetLogEntryText(list[]));
  54. if (list.Count > )
  55. {
  56. int l = list.Count - ;
  57. Console.WriteLine(GetLogEntryText(list[l]));
  58. }
  59. }
  60.  
  61. dt = dt.AddDays();
  62. }
  63. }
  64.  
  65. private string GetLogEntryText(EventLogEntry entry)
  66. {
  67. return string.Format("{0} {1:yyyy-MM-dd HH:mm} 来源:{2} 事件ID:{3}", entry.EntryType, entry.TimeGenerated.ToString("yyyy-MM-dd HH:mm"), entry.Source, entry.InstanceId);
  68. }
  69.  
  70. private IList<EventLogEntry> _events;
  71. public IList<EventLogEntry> Events
  72. {
  73. get
  74. {
  75. if (_events == null)
  76. {
  77. _events = new List<EventLogEntry>();
  78.  
  79. for (int i = ; i < _eventCollection.Count; i++)
  80. {
  81. EventLogEntry entry = _eventCollection[i];
  82. _events.Add(entry);
  83. if (i % == ) Console.Write(".");
  84. }
  85. }
  86.  
  87. return _events;
  88. }
  89. }
  90.  
  91. public int Count
  92. {
  93. get { return Events.Count; }
  94. }
  95.  
  96. }
  97. }

【原创】利用Windows系统日志统计员工每天上下班考勤时间的更多相关文章

  1. 如何安全管理windows系统日志,windows系统日志的报表和告警

    如何安全管理windows系统日志,windows系统日志的报表和告警 无论大小,每个拥有IT基础设施的组织都容易发生内部安全攻击.您的损失等同于黑客的收益:访问机密数据.滥用检索到的信息.系统崩溃, ...

  2. 利用Windows内置工具winsat测试硬盘速度(SSD&机械盘对比)

    利用Windows内置工具winsat测试硬盘速度(SSD&机械盘对比) 以下是红色内容是在命令行运行: C:\Users\Administrator>winsat diskWindow ...

  3. 利用windows系统ftp命令编写的BAT文件上传[转]

    利用windows系统ftp命令编写的BAT文件上传[转] 利用windows系统ftp命令编写的BAT文件上传[转] 在开发中往往需要将本地的程序上传到服务器,而且用惯了linux命令的人来说.在w ...

  4. Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用

    概述 Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Mi ...

  5. 利用Windows 2003系统中实现两个网段的路由

    利用Windows 2003系统中实现两个网段的路由 当一个局域网中存在两个以上网段时,分属于不同网段内的主机彼此互不可见.为了解决这个问 题,就必须在不同的网段之间设置路由器.如果花费上万元资金购买 ...

  6. [原创]App崩溃率统计工具推荐

    [原创]App崩溃率统计工具推荐 1 友盟(推荐) 友盟是一款比较成熟的工具,同时也可以展示留存,日活,事件等. 2 Bugly   腾讯的bugly统计数据也算是比较早的,可惜后续维护比较弱,功能与 ...

  7. 利用windows任务计划备份sqlserver

    sqlserver Express版不含agent service(虽然可以从“服务”里看到,但是无法启动),因此无法使用代理服务执行备份作业,如果代理作业服务正常,建议还是首先采用代理服务. 此备份 ...

  8. Delphi利用Windows GDI实现文字倾斜

    Delphi利用Windows GDI实现文字倾斜 摘要 Delphi利用Windows GDI实现文字倾斜 procedure TForm1.FormPaint(Sender: TObject);v ...

  9. Mark Russinovich 的博客:Windows Azure 主机更新:原因、时间和方式

     Mark Russinovich的技术博客涵盖 Windows故障排除.技术和安全等主题. Windows Azure主机更新:原因.时间和方式 Windows Azure的计算平台(其中包括 ...

随机推荐

  1. switch_to 理解

    最近看linux0.11源码时,看到任务切换函数switch_to,感觉很晦涩,于是在网上查了一些资料,现在终于有些眉目,特记录于此,以方便大家参考,有什么错误或不足之处,还请大家指出~ switch ...

  2. NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码

    在Objective-c进行网络编程时,经常需要把数据转换成URLEncoding编码,如对+号编码后,变成%2b.这里我们给出一种实现. //NSString+URLEncoding.h #impo ...

  3. SDUT1466双向队列

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=1466&cid=1182 题目描述 想想双向链表……双向队列的定义差不多,也就是说一个队列 ...

  4. Test Markdown Editor

    Last night, I just saw a cute blogger's homepage. Then I want to write something. But anyway, I use ...

  5. LintCode 字符串比较

    比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是大写字母: 给出 A = "ABCD" B = "AABC", 返回 false ...

  6. Java学习笔记之:Java流程控制

    一.介绍 Java流程控制包括顺序控制.条件控制和循环控制. 顺序控制,就是从头到尾依次执行每条语句操作.条件控制,基于条件选择执行语句,比方说,如果条件成立,则执行操作A,或者如果条件成立,则执行操 ...

  7. shutdown -s -t

    import java.io.*; import java.awt.*; public class HackDemo{ public static void main(String args[])th ...

  8. NSRange

    int main(int argc, const char * argv[]) {    @autoreleasepool {        // insert code here...       ...

  9. Tomcat的SessionID引起的Session Fixation和Session Hijacking问题

    上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hi ...

  10. 【翻译】JavaScript中的作用域和声明提前

    原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html ===翻译开始=== 你知道下面的JavaScript脚本执 ...