// // ProcessListSetPerMachine() helper lists counter sets on a machine. // NOTE: machine argument should be NULL for the local machine // private void ProcessListSetPerMachine(string machine) { StringCollection counterSets = new StringCollection(); uint res = _pdhHelper.EnumObjects(machine, ref counterSets); if (res != 0) { // add an error message string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("NoCounterSetsOnComputer"), machine, res); Exception exc = new Exception(msg); WriteError(new ErrorRecord(exc, "NoCounterSetsOnComputer", ErrorCategory.InvalidResult, machine)); return; } CultureInfo culture = GetCurrentCulture(); List <Tuple <char, char> > characterReplacementList = null; StringCollection validPaths = new StringCollection(); _cultureAndSpecialCharacterMap.TryGetValue(culture.Name, out characterReplacementList); foreach (string pattern in _listSet) { bool bMatched = false; string normalizedPattern = pattern; if (characterReplacementList != null) { foreach (Tuple <char, char> pair in characterReplacementList) { normalizedPattern = normalizedPattern.Replace(pair.Item1, pair.Item2); } } WildcardPattern wildLogPattern = new WildcardPattern(normalizedPattern, WildcardOptions.IgnoreCase); foreach (string counterSet in counterSets) { if (!wildLogPattern.IsMatch(counterSet)) { continue; } StringCollection counterSetCounters = new StringCollection(); StringCollection counterSetInstances = new StringCollection(); res = _pdhHelper.EnumObjectItems(machine, counterSet, ref counterSetCounters, ref counterSetInstances); if (res == PdhResults.PDH_ACCESS_DENIED) { string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterSetEnumAccessDenied"), counterSet); Exception exc = new Exception(msg); WriteError(new ErrorRecord(exc, "CounterSetEnumAccessDenied", ErrorCategory.InvalidResult, null)); continue; } else if (res != 0) { ReportPdhError(res, false); continue; } string[] instanceArray = new string[counterSetInstances.Count]; int i = 0; foreach (string instance in counterSetInstances) { instanceArray[i++] = instance; } // // Special case: no instances present: change to * to create a valid paths // if (instanceArray.Length == 1 && instanceArray[0].Length == 0) { instanceArray[0] = "*"; } Dictionary <string, string[]> counterInstanceMapping = new Dictionary <string, string[]>(); foreach (string counter in counterSetCounters) { if (!counterInstanceMapping.ContainsKey(counter)) { counterInstanceMapping.Add(counter, instanceArray); } } PerformanceCounterCategoryType categoryType = PerformanceCounterCategoryType.Unknown; if (counterSetInstances.Count > 1) { categoryType = PerformanceCounterCategoryType.MultiInstance; } else // if (counterSetInstances.Count == 1) //??? { categoryType = PerformanceCounterCategoryType.SingleInstance; } string setHelp = _pdhHelper.GetCounterSetHelp(machine, counterSet); CounterSet setObj = new CounterSet(counterSet, machine, categoryType, setHelp, ref counterInstanceMapping); WriteObject(setObj); bMatched = true; } if (!bMatched) { string msg = _resourceMgr.GetString("NoMatchingCounterSetsFound"); Exception exc = new Exception(string.Format(CultureInfo.InvariantCulture, msg, machine ?? "localhost", normalizedPattern)); WriteError(new ErrorRecord(exc, "NoMatchingCounterSetsFound", ErrorCategory.ObjectNotFound, null)); } } }
// // ProcessListSet(). // Does the work to process ListSet parameter set. // private void ProcessListSet() { uint res = _pdhHelper.ConnectToDataSource(_resolvedPaths); if (res != 0) { ReportPdhError(res, true); return; } StringCollection machineNames = new StringCollection(); res = _pdhHelper.EnumBlgFilesMachines(ref machineNames); if (res != 0) { ReportPdhError(res, true); return; } foreach (string machine in machineNames) { StringCollection counterSets = new StringCollection(); res = _pdhHelper.EnumObjects(machine, ref counterSets); if (res != 0) { return; } StringCollection validPaths = new StringCollection(); foreach (string pattern in _listSet) { bool bMatched = false; WildcardPattern wildLogPattern = new WildcardPattern(pattern, WildcardOptions.IgnoreCase); foreach (string counterSet in counterSets) { if (!wildLogPattern.IsMatch(counterSet)) { continue; } StringCollection counterSetCounters = new StringCollection(); StringCollection counterSetInstances = new StringCollection(); res = _pdhHelper.EnumObjectItems(machine, counterSet, ref counterSetCounters, ref counterSetInstances); if (res != 0) { ReportPdhError(res, false); continue; } string[] instanceArray = new string[counterSetInstances.Count]; int i = 0; foreach (string instance in counterSetInstances) { instanceArray[i++] = instance; } Dictionary <string, string[]> counterInstanceMapping = new Dictionary <string, string[]>(); foreach (string counter in counterSetCounters) { counterInstanceMapping.Add(counter, instanceArray); } PerformanceCounterCategoryType categoryType = PerformanceCounterCategoryType.Unknown; if (counterSetInstances.Count > 1) { categoryType = PerformanceCounterCategoryType.MultiInstance; } else //if (counterSetInstances.Count == 1) //??? { categoryType = PerformanceCounterCategoryType.SingleInstance; } string setHelp = _pdhHelper.GetCounterSetHelp(machine, counterSet); CounterSet setObj = new CounterSet(counterSet, machine, categoryType, setHelp, ref counterInstanceMapping); WriteObject(setObj); bMatched = true; } if (!bMatched) { string msg = _resourceMgr.GetString("NoMatchingCounterSetsInFile"); Exception exc = new Exception(string.Format(CultureInfo.InvariantCulture, msg, CommonUtilities.StringArrayToString(_resolvedPaths), pattern)); WriteError(new ErrorRecord(exc, "NoMatchingCounterSetsInFile", ErrorCategory.ObjectNotFound, null)); } } } }