私のローカルマシンのセキュリティログイベントからデータを取得する際に、以下のコードを使用する際に問題があります。私はさまざまなコンピュータでテストしました。ローカルマシンはWindows XP sp3です。クエリにはエラーはありませんが、0レコードが返されます。リモートマシンの場合、それは完全に動作します 誰も私に解決策を与えることができますか? これはコードです:Win32_NTLogEventのクエリWHERE Logfile = 'Security'はリモートマシンでのみ動作します
using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
string[] arrComputers = {".","clientN"};
foreach (string strComputer in arrComputers)
{
Console.WriteLine("==========================================");
Console.WriteLine("Computer: " + strComputer);
Console.WriteLine("==========================================");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(
"\\\\" + strComputer + "\\root\\CIMV2",
"SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Security'");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_NTLogEvent instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("RecordNumber: {0}", queryObj["RecordNumber"]);
Console.WriteLine("SourceName: {0}", queryObj["SourceName"]);
Console.WriteLine("TimeGenerated: {0}", queryObj["TimeGenerated"]);
}
}
}
catch(ManagementException err)
{
MessageBox.Show("An error occurred while querying for WMI data: " + err.Message);
}
}
}
}
私はそれが動作VBSでWMIクエリのための偽装レベルを使用していることを理解していました。
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Security)}!\\" _
& strComputer & "\root\cimv2")
Set colLoggedEvents = objWMI.ExecQuery _
("Select * from Win32_NTLogEvent Where Logfile = 'Security'")
だから私はC#で翻訳する必要があります。
が、残念ながらこれは、コンピュータ名を書くと同じで、仕事をdoesen't。 – AlessandroG
なぜ否定的な投票ですか? – AlessandroG
私も否定的な投票について疑問に思っていたので、私はそれを正当なものにしました....まともな質問です。私はローカルマシン上でクエリWMIをなぜ傾けるのか把握しようとしています。運があれば私の答えを更新します:-) – weloytty