Bien que la méthode en passant par une requête SQL soit plus rapide, il peut être utile de pouvoir collecter des données de performance spécifique via le sdk Scom.
La fonction suivants prend en paramètre les données de connexion ($managementServer,$user,$passwd) et les critère de compteurs de performance qui peuvent être regroupé dans le paramètre $criteria, ainsi que le paramètre $HourOffset qui permet de préciser une fenêtre de collecte.
! Attention: Plus ce paramètre en heure est important, plus le nombre de sample renvoyé est important.
# Fonction de recuperation de compteur de performance dans la base OperationsManager
Function GetPerfValueFromScomv2($managementServer,$user,$passwd,$criteria,$monitoringClassId = $null,$monitoringObjectName = $null,$monitoringObjectDisplayName = $null,$objectName = $null,$counterName = $null,$instanceName = $null,$HourOffset,$startTime = (Get-Date).AddHours(-$HourWindow),$endTime = (Get-Date))
{
#Fonction d'ajout de critere a la requete
function Add-Criteria()
{
param($criteria,$clause)
if ($criteria -ne $null)
{$criteria += " AND $clause"}
else
{$criteria = $clause}
return($criteria)
}
#Import du module Scom
import-module OperationsManager
#Connexion au management server
$mgConn = New-Object Microsoft.EnterpriseManagement.ManagementGroupConnectionSettings($managementServer)
$mgConn.UserName = $user
$mgConn.Password = $passwd
$mg = New-Object Microsoft.EnterpriseManagement.ManagementGroup($mgConn)
if ($criteria -eq $null) {
if ($monitoringClassId -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "MonitoringClassId = '{$monitoringClassId}'" }
if ($monitoringObjectDisplayName -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "MonitoringObjectDisplayName = '$monitoringObjectDisplayName'" }
if ($monitoringObjectName -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "MonitoringObjectName = '$monitoringObjectName'" }
if ($objectName -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "ObjectName = '$objectName'" }
if ($counterName -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "CounterName = '$counterName'" }
if ($instanceName -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "InstanceName = '$instanceName'" }
}
#Creation du reader
$reader = $mg.GetMonitoringPerformanceDataReader($criteria)
while ($reader.Read())
{
#Creation de l'objet de performance
$perfData = $reader.GetMonitoringPerformanceData()
$valueReader = $perfData.GetValueReader($startTime,$endTime)
#Renvoi des valeurs
while ($valueReader.Read())
{
$perfValue = $valueReader.GetMonitoringPerformanceDataValue()
$perfValue
}
}
}