public static ConnectionOptions GetConnectOptions(string machineName, WMIPollingSettings wps) { var co = new ConnectionOptions(); if (machineName == Environment.MachineName) { return(co); } switch (machineName) { case "localhost": case "127.0.0.1": return(co); default: co = new ConnectionOptions { Authentication = AuthenticationLevel.Packet, Timeout = new TimeSpan(0, 0, 30), EnablePrivileges = true, }; break; } if (wps != null && !string.IsNullOrWhiteSpace(wps.AuthUser) && !string.IsNullOrWhiteSpace(wps.AuthPassword)) { co.Username = wps.AuthUser; co.Password = wps.AuthPassword; } if (wps != null && wps.QueryTimeout != default(int)) { co.Timeout = new TimeSpan(0, 0, wps.QueryTimeout); } return(co); }
public static ManagementScope GetManagementScope(string machineName, WMIPollingSettings wps) { if (!ManagementScopes.ContainsKey(machineName.ToLower())) { var newScope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", machineName), GetConnectOptions(machineName, wps)); ManagementScopes.TryAdd(machineName.ToLower(), newScope); } return(ManagementScopes[machineName.ToLower()]); }
public static QueryResult <T> Query <T>(string machineName, WMIPollingSettings wps, string query, Func <IEnumerable <ManagementObject>, IEnumerable <T> > conversion) { var timer = Stopwatch.StartNew(); var scope = GetManagementScope(machineName, wps); var searcher = GetManagementObjectSearcher(machineName, query, scope); using (var results = searcher.Get()) { var queryResults = results.Cast <ManagementObject>(); timer.Stop(); return(new QueryResult <T> { Duration = timer.Elapsed, Data = conversion(queryResults).ToList() }); } }