Skip to content

Instantly share code, notes, and snippets.

@stegenfeldt
Last active July 27, 2020 08:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stegenfeldt/112c6d3dd513f9659298d1321c98ebd1 to your computer and use it in GitHub Desktop.
Save stegenfeldt/112c6d3dd513f9659298d1321c98ebd1 to your computer and use it in GitHub Desktop.
Powershell script for a PoSH Grid Widget in a SCOM 2012 R2 Dashboard, lists all RDS Hosts and their last sampled Total Sessions value.
# Based on https://gallery.technet.microsoft.com/Retrieve-Performance-Data-c4595e2a#content
function Add-Criteria()
{
param($criteria,$clause)
if ($criteria -ne $null)
{$criteria += " AND $clause"}
else
{$criteria = $clause}
return($criteria)
}
$rdsClass = Get-SCOMClass -Name "Microsoft.Windows.Server.2012.R2.RemoteDesktopServicesRole.Service.RDSessionHost"
$rdsHosts = Get-SCOMMonitoringObject -Class $rdsClass | Sort-Object -Property '[Microsoft.Windows.Computer].PrincipalName'
$rdsTotalSessionRule = Get-SCOMRule -Name "Microsoft.Windows.Server.2012.R2.RemoteDesktopServicesRole.Service.RDSessionHost.PerformanceCollection.TotalSessions"
$objectName = "Terminal Services"
$counterName = "Total Sessions"
$InstanceName = ""
$i=0
foreach ($rdsHost in $rdsHosts) {
# Build performance criteria
if ($rdsClass -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "MonitoringClassId = '{$($rdsClass.Id)}'" }
if ($rdsHost -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "MonitoringObjectFullName = '$($rdsHost.FullName)'" }
if ($objectName -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "ObjectName = '$objectName'" }
if ($counterName -ne $null) { $criteria = Add-Criteria -criteria $criteria -clause "CounterName = '$counterName'" }
#$criteria
# Get Performance reader object.
$perfReader = (Get-SCOMManagementGroup).GetMonitoringPerformanceDataReader($criteria)
while ($perfReader.Read()) {
$perfData = $perfReader.GetMonitoringPerformanceData()
$perfValueReader = $perfData.GetValueReader(((Get-Date).AddMinutes(-180)),(Get-Date))
$perfValues = @()
while ($perfValueReader.Read()) {
$perfValues += $perfValueReader.GetMonitoringPerformanceDataValue()
}
$perfValue = $perfValues | Sort-Object -Property TimeSampled | select -Last 1
$dataObject = $ScriptContext.CreateInstance("xsd://stegenfeldt/nullschema")
$dataObject = $ScriptContext.CreateFromObject($rdsHost, "Id=Id,Health=HealthState,Host=Path", $null)
$dataObject["Time Sampled"] = $perfValue.TimeSampled
$dataObject["Total Sessions"] = $perfValue.SampleValue
$ScriptContext.ReturnCollection.Add($dataObject)
}
$criteria = $null
++$i
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment