gpt4 book ai didi

C# WMI读取远程事件日志

转载 作者:行者123 更新时间:2023-12-02 19:49:31 27 4
gpt4 key购买 nike

我正在尝试对另一台计算机运行 WMI 查询,以查找过去 5 小时左右的错误。运行 WMI 查询时,您不应该至少使用 where 子句过滤初始查询吗?

我的代码基于 MSDN 上 WMI 代码创建器生成的示例

这是我使用的选择查询

    private ManagementScope CreateNewManagementScope(string server)
{
string serverString = @"\\" + server + @"\root\cimv2";

ManagementScope scope = new ManagementScope(serverString);

return scope;
}

ManagementScope scope = CreateNewManagementScope(servername);
scope.Connect();
SelectQuery query = new SelectQuery("select * from Win32_NtLogEvent where TimeWritten > '" + DateTime.Now.AddHours(-5).ToString() + "'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection logs = searcher.Get();

int iErrCount = logs.Count;

我只想获取过去 5 小时内的错误计数。获取计数时会抛出错误。该错误是相当模糊的“一般失败”。

[更新 - 现在使用这样的日期]

                DateTime d = DateTime.UtcNow.AddHours(-12);
string dateFilter = ManagementDateTimeConverter.ToDmtfDateTime(d);
SelectQuery query = new SelectQuery("select * from Win32_NtLogEvent where Logfile='Application' AND Type='Error' AND TimeWritten > '" + dateFilter + "'");

使用上面的代码我没有得到任何结果,但我可以在事件日志中看到 2 个错误。日期过滤器有什么问题吗?

我正在使用这个例子 http://msdn.microsoft.com/en-us/library/system.management.managementdatetimeconverter.todatetime.aspx

最佳答案

我执行了以下操作以使其正常工作。我希望这有帮助..

    static void Main(string[] args)
{
var conOpt = new ConnectionOptions();
conOpt.Impersonation = ImpersonationLevel.Impersonate;
conOpt.EnablePrivileges = true;
conOpt.Username = "username";
conOpt.Password = "password";
conOpt.Authority = string.Format("ntlmdomain:{0}", "yourdomain.com");

var scope = new
ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2",
"yourservername.yourdomain.com"),
conOpt);

scope.Connect();
bool isConnected = scope.IsConnected;
if (isConnected)
{

/* entire day */ string dateTime = getDmtfFromDateTime(DateTime.Today.Subtract(new TimeSpan(1, 0, 0, 0)));
string dateTime = getDmtfFromDateTime("09/06/2014 17:00:08"); // DateTime specific

SelectQuery query = new SelectQuery("Select * from Win32_NTLogEvent Where Logfile = 'Application' and TimeGenerated >='" + dateTime + "'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection logs = searcher.Get();
foreach (var log in logs)
{
Console.WriteLine("Message : {0}", log["Message"]);
Console.WriteLine("ComputerName : {0}", log["ComputerName"]);
Console.WriteLine("Type : {0}", log["Type"]);
Console.WriteLine("User : {0}", log["User"]);
Console.WriteLine("EventCode : {0}", log["EventCode"]);
Console.WriteLine("Category : {0}", log["Category"]);
Console.WriteLine("SourceName : {0}", log["SourceName"]);
Console.WriteLine("RecordNumber : {0}", log["RecordNumber"]);
Console.WriteLine("TimeWritten : {0}", getDateTimeFromDmtfDate(log["TimeWritten"].ToString()));
}
}

//ReadLog();
Console.ReadLine();
}

private static string getDmtfFromDateTime(DateTime dateTime)
{
return ManagementDateTimeConverter.ToDmtfDateTime(dateTime);
}

private static string getDmtfFromDateTime(string dateTime)
{
DateTime dateTimeValue = Convert.ToDateTime(dateTime);
return getDmtfFromDateTime(dateTimeValue);
}

private static string getDateTimeFromDmtfDate(string dateTime)
{
return ManagementDateTimeConverter.ToDateTime(dateTime).ToString();
}

关于C# WMI读取远程事件日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com