Hi. We tried to add a performance monitor with wildcard, but it looks like it's not supported, so I wrote a script for Powershell and thought that if would be nice for others to also have it.

The code:

#CommandLine Example:
#"ComputerName:%device" "Query:\BizTalk:Message Box:Host Counters(*)\Host Queue - Suspended Msgs - Length" "LimitMinWarning:1"
#
#For testing:
#$MyArgs = @("ComputerName:SERVERNAME","Query:\BizTalk:Message Box:Host Counters(*)\Host Queue - Suspended Msgs - Length","LimitMinWarning:1","LineBreak:1")
#if ($MyArgs) {
#    foreach ($MyArg in $MyArgs) {
#        $MyType = $MyArg.Split(':')[0]
#        $MyValue = $MyArg.Substring($MyType.Length+1)


#Handle arguments:
if ($args) {
    foreach ($arg in $args) {
        $MyType = $arg.Split(':')[0]
        $MyValue = $arg.Substring($MyType.Length+1)
        switch($MyType.ToLower()){
            "computername"{$ComputerName = $MyValue}
            "query"{$Query = $MyValue}
            "limitmaxerror"{$LimitMaxError = $MyValue}
            "limitmaxwarning"{$LimitMaxWarning = $MyValue}
            "limitminerror"{$LimitMinError = $MyValue}
            "limitminwarning"{$LimitMinWarning = $MyValue}
            "valuelookup"{$ValueLookup = $MyValue}
            "unit"{$Unit = $MyValue}
            "customunit"{$CustomUnit = $MyValue}
            "linebreak"{$LineBreak = $MyValue}
        }
    }
}

#Get the data
$PerfSamples = Get-Counter -ComputerName $ComputerName -Counter $Query

#Function used for creating the results as XML format
function createResult{
    Param(
            [Parameter (Mandatory = $true)] [String]$Channel,
            [Parameter (Mandatory = $true)] [String]$Value,
            [Parameter (Mandatory = $false)] [Int]$LimitMaxError,
            [Parameter (Mandatory = $false)] [Int]$LimitMaxWarning,
            [Parameter (Mandatory = $false)] [Int]$LimitMinError,
            [Parameter (Mandatory = $false)] [Int]$LimitMinWarning,
            [Parameter (Mandatory = $false)] [String]$ValueLookup,
        [Parameter (Mandatory = $false)] [String]$Unit,
        [Parameter (Mandatory = $false)] [String]$CustomUnit,
        [Parameter (Mandatory = $false)] [Int]$LineBreak = 0
    )
    if ($LineBreak -eq 1)
    {
        $LB = "`n"
    }
    $prtgResult += "<result>$LB"
    $prtgResult += "<channel>$Channel</channel>$LB"
    $prtgResult += "<value>$Value</value>$LB"
    if ($LimitMaxError) 
    {
        $prtgResult += "<LimitMaxError>$LimitMaxError</LimitMaxError>$LB"
    }
    if ($LimitMaxWarning)
    {
        $prtgResult += "<LimitMaxWarning>$LimitMaxWarning</LimitMaxWarning>$LB"
    }
    if ($LimitMinError)
    {
        $prtgResult += "<LimitMinError>$LimitMinError</LimitMinError>$LB"
    }
    if ($LimitMinWarning)
    {
        $prtgResult += "<LimitMinWarning>$LimitMinWarning</LimitMinWarning>$LB"
    }
    if ($ValueLookup) 
    {
        $prtgResult += "<ValueLookup>$ValueLookup</ValueLookup>$LB"
    }
    if ($LimitMaxError -Or $LimitMaxWarning -Or $LimitMinError -Or $LimitMinWarning)
    {
        $prtgResult += "<LimitMode>1</LimitMode>$LB"
    } 
    if ($Unit)
    {
        $prtgResult += "<Unit>$Unit</Unit>`n"
        if ($Unit -eq "Custom")
        {
            $prtgResult += "<CustomUnit>$CustomUnit</CustomUnit>$LB"
        }
    } 
    $prtgResult += "</result>$LB"
    return $prtgResult
}

#Looping through the data and creating the XML data for Write-Host
$prtgXML = '<Prtg>'
foreach ($Instance in $PerfSamples.CounterSamples) {
    $prtgXML += createResult -Channel $Query'\'$($Instance.InstanceName) -Value $($Instance.CookedValue) -LimitMaxError $LimitMaxError -LimitMaxWarning $LimitMaxWarning -LimitMinError $LimitMinError -LimitMinWarning $LimitMinWarning -ValueLookup $ValueLookup -Unit $Unit -CustomUnit $CustomUnit -LineBreak $LineBreak
}
$prtgXML += '</Prtg>'

#Printing out the data
Write-Host $prtgXML


Article Comments