Functions/Receive-PRTGObjectStatus.ps1

Function Receive-PRTGObjectStatus {
    <#
    .Synopsis
       Receive-PRTGObjectStatus
 
    .DESCRIPTION
       Query the status of an object directly from PRTGserver and returns.
       Difference to Get-PRTGObject is, that "Get-PRTGObject" is working on a modfified sensortree variable in the memory and not on livedata from PRTGServer
 
    .NOTES
       Author: Andreas Bellstedt
 
       adopted from PSGallery Module "PSPRTG"
       Author: Sam-Martin
       Github: https://github.com/Sam-Martin/prtg-powershell
 
    .LINK
       https://github.com/AndiBellstedt/PoShPRTG
 
    .EXAMPLE
       Receive-PRTGObjectStatus -ObjectId 1
       Receive-PRTGObjectStatus -ID 1
 
    .EXAMPLE
       Receive-PRTGObjectStatus -ObjectId 1 -Server "https://prtg.corp.customer.com" -User "admin" -Pass "1111111"
 
    #>

    [CmdletBinding(DefaultParameterSetName='Default', 
                  SupportsShouldProcess=$false, 
                  ConfirmImpact='low')]
    [OutputType([PSCustomObject])]
    Param(
        # ID of the object to pause/resume
        [Parameter(Mandatory=$true,
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [Alias('ID')]
        [ValidateScript({$_ -gt 0})]
            [int[]]$ObjectID,

        # Url for PRTG Server
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [ValidateScript({if( ($_.StartsWith("http")) ){$true}else{$false}})]
            [String]$Server = $global:PRTGServer,

        # User for PRTG Authentication
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
            [String]$User = $global:PRTGUser,

        # Password or PassHash for PRTG Authentication
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
            [String]$Pass = $global:PRTGPass
    )
    Begin {
        $Local:logscope = $MyInvocation.MyCommand.Name
        $StatusMapping = @{
            1="Unknown" 
            2="Scanning"
            3="Up"
            4="Warning"
            5="Down"
            6="No Probe"
            7="Paused by User"
            8="Paused by Dependency"
            9="Paused by Schedule"
            10="Unusual"
            11="Not Licensed" 
            12="Paused Until"
        }
    }

    Process {
        foreach($ID in $ObjectId) {
            try{
                $statusID = (Receive-PRTGObjectProperty -ObjectId $ID -PropertyName 'status' -Server $Server -User $User -Pass $Pass -ErrorAction Stop -Verbose:$false)
            } catch {
                Write-Log -LogText "Unable to get object status from prtg. ($Server) Message:$($_.exception.message)" -LogType Error -LogScope $Local:logscope -NoFileStatus -Error
                return
            }
            $hash= @{
                'objid'=$ID
                "status"=$StatusMapping[[int]$statusID]
                "status_raw"=$statusID
            }
            $result = New-Object -TypeName PSCustomObject -Property $hash
            return $result
        }
    }
}