【发布时间】:2018-02-25 11:27:34
【问题描述】:
我正在尝试使用Win32_NTEventLogFile WMI 类导出Windows 事件日志的Applications 分支,但仅针对特定源对其进行过滤。 (否则日志包含太多不必要的信息。)
所以,举个例子,比如说,我需要导出所有包含MSSQL$SQLSRVR2012的记录:
我这样做:
using System.Management;
static void Main(string[] args)
{
BackupEventLogFilterBySource("Application", "MSSQL$SQLSRVR2012", @"C:\Users\User\Desktop\exp.evtx");
}
public static void BackupEventLogFilterBySource(String logName, String applicationName, String targetFile)
{
ManagementScope scope = new ManagementScope(@"\\.\root\cimv2");
scope.Options.EnablePrivileges = true;
scope.Options.Impersonation = ImpersonationLevel.Impersonate;
ObjectQuery query = new ObjectQuery(
String.Format("Select * from Win32_NTEventLogFile Where LogFileName='{0}' And Sources='{1}'",
logName, applicationName)
);
using (ManagementObjectSearcher search =
new ManagementObjectSearcher(scope, query))
{
foreach (ManagementObject o in search.Get())
{
ManagementBaseObject inParams = o.GetMethodParameters("BackupEventlog");
inParams["ArchiveFileName"] = targetFile;
ManagementBaseObject outParams = o.InvokeMethod("BackupEventLog", inParams, null);
var res = outParams.Properties["ReturnValue"].Value;
Console.Write("result=" + res + "\n");
}
}
}
但该查询失败并出现以下异常:
“System.Management.ManagementException”类型的未处理异常 发生在 System.Management.dll 中
附加信息:无效查询
那么我在这里做错了什么?
【问题讨论】:
-
我不确定,但是,如果你通过了这个文档:msdn.microsoft.com/en-us/library/aa394225(v=vs.85).aspx 它说
Sources是一个字符串类型的数组 -
@FaizanRabbani:是的,我也看到了。虽然我不确定那是什么意思?将它作为一个数组真的没有意义。
-
它适用于多个来源,但我不知道如何将其放入查询中。