Listing all the performance collection rules in a management group

Performance monitors will look at at performance counter value and change state when a particular condition is detected. However if you want to collect performance counters for viewing in the console or reporting, you need to create a performance collection rule. 

Here is sample script I put together to show what performance rules are present, and some details about each rule as as collection frequency, the perf conter name, and where the data is written.

function GetPerfCounterName ([String] $configuration)

$config = ("<config>" + $configuration + "</config>")

return ($config.Config.ObjectName + "\" + $config.Config.CounterName)


function GetFrequency ([String] $configuration)

$config = ("<config>" + $configuration + "</config>")

$frequency = $config.Config.Frequency;

if($frequency -eq $null)
$frequency = $config.Config.IntervalSeconds;

return ($frequency)


function GetDisplayName($performanceRule)
 if($performanceRule.DisplayName -eq $null)
  return ($performanceRule.Name);
  return ($performanceRule.DisplayName);


function GetWriteActionNames($performanceRule)
 $writeActions = ""; 

 foreach($writeAction in $performanceRule.WriteActionCollection)

  $writeActions += " " + $writeAction.Name;

 return ($writeActions);

$perf_collection_rules = get-rule -criteria:"Category='PerformanceCollection'"

$perf_collection_rules | select-object @{name="Type";expression={foreach-object {(Get-MonitoringClass -id:$_.Target.Id).DisplayName}}},@{name="RuleDisplayName";expression={foreach-object {GetDisplayName $_}}} ,@{name="CounterName";expression={foreach-object {GetPerfCounterName $_.DataSourceCollection[0].Configuration}}},@{name="Frequency";expression={foreach-object {GetFrequency $_.DataSourceCollection[0].Configuration}}},@{name="WriteActions";expression={foreach-object {GetWriteActionNames $_}}}  | sort Type,RuleDisplayName,CounterName | export-csv "c:\perf_collection_rules.csv"


The write action column contains information about where the perf counter is written. 

 WriteToDB or CollectionPerformanceData - write to the operational DB

WriteToDW or CollectPerfDataWarehouse - write to the data warehouse

WC - This is used to storing baseline data for a perf counter into the operational DB.

In order to run this script, you will need to open the OpsMgr Command Shell and then just paste in the script.

Comments (7)

  1. William Gregoire says:

    For a Powershell newbie…how would I run this from the command line?

  2. For any new COLLECTION RULE you create, do you get it automatically written to BOTH the OpsDB AND the datawarehouse ?

  3. Zied says:


    Good JOB…

    Can i have more Scripts? Please…


  4. Igor says:

    Hi Boris!

    Thanks for this blog. I have a question.

    Is it possible to get collected performance data using the Operation Manager SDK or it is possible to get them only just by querying Operation Manager DB directly?

  5. Sylvain Groulx says:


    Same question again. How can I optain the performance data from MOM? Is the actual SDK providing with such feature?

    Thank you

  6. borisyan says:

    You can definitely get the data using the SDK. I suggest you check out the MSDN docs:

Skip to main content