C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能...
先不说如何实现,先来看看效果图:
读取远程的需要提供下远程的计算用户名和密码即可。
如何实现这个代码功能,请看如下代码部分:
实体类:
using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace GetDNSListTool {public class EventLogEntity{string strEventType = string.Empty; /// <summary>/// 日志类型/// </summary>public string EventType{get { return strEventType; }set { strEventType = value; }}string strTimeWritten = string.Empty; /// <summary>/// 日志日期/// </summary>public string TimeWritten{get { return strTimeWritten; }set { strTimeWritten = value; }}string strCategory = string.Empty; /// <summary>/// 日志种类/// </summary>public string Category{get { return strCategory; }set { strCategory = value; }}string strSourceName = string.Empty; /// <summary>/// 日志来源/// </summary>public string SourceName{get { return strSourceName; }set { strSourceName = value; }}/// <summary>/// Eevnet ID/// </summary>string strEventIdentifier = string.Empty; public string EventIdentifier{get { return strEventIdentifier; }set { strEventIdentifier = value; }}string strRecordNumber = string.Empty; /// <summary>/// 行号/// </summary>public string RecordNumber{get { return strRecordNumber; }set { strRecordNumber = value; }}string strEventCode = string.Empty; /// <summary>/// 日志编码/// </summary>public string EventCode{get { return strEventCode; }set { strEventCode = value; }}string strCategoryString = string.Empty;/// <summary>/// CategoryString/// </summary>public string CategoryString{get { return strCategoryString; }set { strCategoryString = value; }}string strMessage = string.Empty;/// <summary>/// 详细错误/// </summary>public string Message{get { return strMessage; }set { strMessage = value; }}} }
#region//格式化信息类别/// <summary>/// 格式化信息类别/// </summary>/// <param name="val"></param>/// <returns></returns>private string GetEventTypeString(NTLogEvent.EventTypeValues val){switch (val){case NTLogEvent.EventTypeValues.Error:return EventTypeDescription.Error;case NTLogEvent.EventTypeValues.Warning:return EventTypeDescription.Warning;case NTLogEvent.EventTypeValues.Information:return EventTypeDescription.Information;case NTLogEvent.EventTypeValues.Security_audit_success:return EventTypeDescription.SuccessAudit;case NTLogEvent.EventTypeValues.Security_audit_failure:return EventTypeDescription.FailureAudit;default:return EventTypeDescription.Unknown;}}#endregion
#region//获取日志文件/// <summary>/// 获取日志文件/// </summary>/// <param name="topNumber">多少条</param>/// <param name="eventCode">事件ID</param>/// <param name="startTime">开始时间</param>/// <param name="endTime">结束时间</param>/// <returns>返回集合</returns>public List<EventLogEntity> GetEventLogList(int topNumber, string eventCode, string startTime, string endTime){List<EventLogEntity> logList = new List<EventLogEntity>();try{//条件语句StringBuilder query = new StringBuilder();StringBuilder strWhere = new StringBuilder();query.Append("select EventType, TimeWritten, Category, SourceName, EventIdentifier, RecordNumber,CategoryString,EventCode,Message from Win32_NTLogEvent ");//日志IDif (!string.IsNullOrEmpty(eventCode)){strWhere.Append(" AND eventCode = '");strWhere.Append(eventCode);strWhere.Append("'");}//开始日期if (!string.IsNullOrEmpty(startTime)){strWhere.Append(" AND TimeWritten>= '");strWhere.Append(getDmtfFromDateTime(startTime));strWhere.Append("'");}//结束日期if (!string.IsNullOrEmpty(endTime)){strWhere.Append(" AND TimeWritten<= '");strWhere.Append(getDmtfFromDateTime(endTime));strWhere.Append("'");}string laststrWhere = strWhere.ToString();//如果有检索条件if (!string.IsNullOrEmpty(laststrWhere)){laststrWhere = " where " + laststrWhere.Substring(4);}//组合条件 query.Append(laststrWhere);//值ManagementObjectCollection moCollection = null;//如果是本地if (isLocal){ManagementScope scope = new ManagementScope(scopePath);scope.Connect();ObjectQuery objectQuery = new ObjectQuery(query.ToString());//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合ManagementObjectSearcher Searcher = new ManagementObjectSearcher(scope, objectQuery);//异步调用WMI查询moCollection = Searcher.Get();}//表示远程else{//设定通过WMI要查询的内容ObjectQuery Query = new ObjectQuery(query.ToString());//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Ms, Query);//异步调用WMI查询moCollection = Searcher.Get();}//循环if (moCollection != null){//计数器int i = 0;//foreachforeach (ManagementObject mObject in moCollection){//如果i==topNumber就退出循环if (i == topNumber){break;}EventLogEntity eventLog = new EventLogEntity();//日志类型eventLog.EventType = mObject["EventType"] == null ? string.Empty :GetEventTypeString(((NTLogEvent.EventTypeValues)(System.Convert.ToInt32(mObject["EventType"]))));//日志种类eventLog.Category = mObject["Category"] == null ? string.Empty :mObject["Category"].ToString();//日志种类eventLog.CategoryString = mObject["CategoryString"] == null ? string.Empty :mObject["CategoryString"].ToString();//日志编码eventLog.EventCode = mObject["EventCode"] == null ? string.Empty :mObject["EventCode"].ToString();//日志IDeventLog.EventIdentifier = mObject["EventIdentifier"] == null ? string.Empty :mObject["EventIdentifier"].ToString();//行号eventLog.RecordNumber = mObject["RecordNumber"] == null ? string.Empty :mObject["RecordNumber"].ToString();//日期eventLog.TimeWritten = mObject["TimeWritten"] == null ? string.Empty :getDateTimeFromDmtfDate(mObject["TimeWritten"].ToString());//日志来源eventLog.SourceName = mObject["SourceName"] == null ? string.Empty :mObject["SourceName"].ToString();//详细错误eventLog.Message = mObject["Message"] == null ? string.Empty :mObject["Message"].ToString();//add logList.Add(eventLog);//// i++;}}}catch (Exception ex){throw ex;}// return logList;}#endregion#region//根据行号检索错误信息/// <summary>/// 根据行号检索错误信息/// </summary>/// <param name="recordNumber">行号</param>/// <returns>返回错误信息</returns>public string GetErrMsg(uint recordNumber){string Msg = string.Empty;try{//条件语句StringBuilder query = new StringBuilder();query.Append("select Message, InsertionStrings from Win32_NTLogEvent where ");query.Append(" RecordNumber='");query.Append(recordNumber);query.Append("'");//值ManagementObjectCollection moCollection = null;//如果是本地if (isLocal){ManagementScope scope = new ManagementScope(scopePath);scope.Connect();ObjectQuery objectQuery = new ObjectQuery(query.ToString());//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合ManagementObjectSearcher Searcher = new ManagementObjectSearcher(scope, objectQuery);//异步调用WMI查询moCollection = Searcher.Get();}//表示远程else{//设定通过WMI要查询的内容ObjectQuery Query = new ObjectQuery(query.ToString());//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Ms, Query);//异步调用WMI查询moCollection = Searcher.Get();}//检索错误信息foreach (ManagementObject mObject in moCollection){//错误信息string message = mObject["Message"] == null ?string.Empty : mObject["Message"].ToString();//错误信息string[] insertionStrings =mObject["InsertionStrings"]==null?null:(string[])mObject["InsertionStrings"];//如果有错误信息if (string.IsNullOrEmpty(message)){if (insertionStrings.Length > 0){StringBuilder sb = new StringBuilder();for (int i = 0; i < insertionStrings.Length; i++){sb.Append(insertionStrings[i]);sb.Append(" ");}Msg = sb.ToString();}}else{Msg= message;}}}catch{}//returnreturn string.IsNullOrEmpty(Msg) ? "无错误信息,请与管理员联系核对!" : Msg;}#endregion
C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能...相关推荐
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统摘要信息查看功能...
最近做一个项目碰到要实现查看本地和远程计算机的摘要信息,采用命令行msinfo32可以很快查看到,如下图: 需要在用C#来实现类似信息查看.尤其远程计算机的..因此通过MSDN查询到.win32的AP ...
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统摘要信息查看功能
最近做一个项目碰到要实现查看本地和远程计算机的摘要信息,采用命令行msinfo32可以很快查看到,如下图: 需要在用C#来实现类似信息查看.尤其远程计算机的..因此通过MSDN查询到.win32的AP ...
- java获取 msinfo32 api_C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能...
#region//获取日志文件 /// ///获取日志文件/// /// 多少条 /// 事件ID /// 开始时间 /// 结束时间 /// 返回集合 public List GetEventLog ...
- 用Debug函数实现API函数的跟踪
用Debug函数实现API函数的跟踪 如果我们能自己编写一个类似调试器的功能,这个调试器需要实现我们对于跟踪监视工具的要求,即自动记录输入输出参数,自动让目标进程继续运行.下面我们就来介绍在不知道函数 ...
- 动态获取API函数地址---对抗win7 aslr安全机制
本人近期在研究缓冲区溢出,在学习中发现,win7下系统关键函数的地址随机化了(每次重启后地址有变),为了解决地址定位问题,在偌大的互联网上找了好久,贴来分享下,以作备用. -------------- ...
- 剑走偏锋--使用WMI获取远程计算机进程程序集中查毒病毒打造内网安全环境
剑走偏锋-使用WMI获取远程计算机进程程序 集中查毒病毒打造内网安全环境 作者:高玉涵 时间:2019.04.1815:45 博客:blog.csdn.net/cg_i 作者背景环境参见: <由 ...
- //5. 有若干本图书,图书信息包括图书书名、作者、出版社和价格。要求输出图书价格(const成员函数), //显示图书书名、作者、出版社(非const成员函数)、根据图书书名查找图书并显示相关信息等
//5. 有若干本图书,图书信息包括图书书名.作者.出版社和价格.要求输出图书价格(const成员函数), //显示图书书名.作者.出版社(非const成员函数).根据图书书名查找图书并显示相关信息等 ...
- C/C++通过WMI和系统API函数获取获取系统硬件配置信息(转)
前段时间由于项目需要,要求做一个服务器的实时性能监控(CPU.内存.网络利用率等)和读取服务器的硬件配置参数的接口供项目组使用,就是一个类似于鲁大师之类的东东吧... 当然第一想法肯定是利用Windo ...
- C/C++通过WMI和系统API函数获取获取系统硬件(cpu,内存,显卡,网卡)配置信息
转自:http://blog.csdn.net/ly402609921/article/details/7446943 前段时间由于项目需要,要求做一个服务器的实时性能监控(CPU.内存.网络利 ...
最新文章
- 微信小程序showModel使用注意
- ubuntu的学习教程(常用操作)
- Effective C++ 条款05
- Android注解使用之ButterKnife 8.0注解使用介绍
- 初一模拟赛总结(3.16)
- 启动时不自动打开一个空文档
- 梯度下降算法(GD)—收敛速率证明
- php网站 小偷源代码
- 威纶通触摸屏与西门子PLC200之间的无线通讯
- 网盘源码php,PHP云盘网盘系统(PHP云盘源码工具)V1.1 免费版
- vue echarts柱状统计图,多组数据对比
- Android Protobuf应用及原理
- 了解一些常用的文件系统和一些基础定义
- Masked Autoencoders Are Scalable Vision Learners 论文研读
- 软件设计师教程(十三)计算机系统知识-软件系统分析与设计
- 【ORB-SLAM】原理部分
- 蓝桥杯训练总结(收官)
- 第十四周 项目2 根据成绩排序或姓名排序输出姓名或成绩问题
- java8 四大函数式接口 和 用于数据处理的 stream流 使用详解
- jenkin swindows启动_Windows环境下实现Jenkins自动化部署
热门文章
- 手握智算中心“绿洲”,毫末跑在中美自动驾驶长跑第一线
- 利用select into直接创建临时表
- vm linux 文件夹,根目录vmlinux的编译过程
- element table 暂无数据
- 2020 全球顶尖计算机科学家排名发布:两位华人学者入全球前 10,Top 1000 华人学者过百...
- SpringBoot整合任务系统(quartz和SpringTask)
- C++字符串转换整数 (atoi)
- 数据库ACID的含义
- python 爬虫(表情包)
- Amdroid ExpandableListView(可折叠列表)的基本使用