What is this?

This knowledgebase contains questions and answers about PRTG Network Monitor and network monitoring in general. You are invited to get involved by asking and answering questions!

Learn more

PRTG Network Monitor

Intuitive to Use. Easy to manage.
300.000 administrators have chosen PRTG to monitor their network. Find out how you can reduce cost, increase QoS and ease planning, as well.

Free Download

Top Tags


View all Tags

PowerShell EXE/Script ReturnValue ( Altaro Backup Monitoring

Votes:

0

Your Vote:

Up

Down

# Altaro Backup Monitoring
#-------------------
# ------------------
param(
    [string]$ComputerName
    )

$ret = Invoke-Command -ComputerName $ComputerName -ScriptBlock {
$Yesterday = ((Get-Date) - (New-TimeSpan -Day 1))
[int]$retvalue = 0
try { 
    $Geteventlog = (Get-WinEvent -ErrorAction Stop  -FilterHashtable @{LogName='Application';StartTime=$Yesterday;Id=5000,5005,5007,5002}) 
} catch {
   $_.Exception.GetType().FullName
   $Geteventlog_Success = "0"
}
for($i = 0 ; $i -le $Geteventlog_Success.Length; $i++){
    $Id = $Geteventlog_Success[$i].Id
    $Message = $Geteventlog_Success[$i].Message

    Switch ($Id) {
       "5007" { Write-Host "2:Backups NOT OK"
                $retvalue =  2;
                Exit 2}
       "5000" { Write-Host "0:Backups OK"
                $retvalue = 0;
                }
        
       "5001" { 
                Write-Host "1:Backup Completed With Warnings"
            $retvalue =  1
            Exit 1
            }
       "5002" { Write-Host "2:Backups NOT OK"
                $retvalue = 2;
                Exit 2 }
       "5005" { Write-Host "0:Backups OK"
                $retvalue =  0;}

       "0" { Write-Host "2:No Backups Last 24 hours"; $retvalue =  2; Exit 2}
       }
    }
    return $retvalue
}

This Always gives me back "Backups not OK" but the state stays on up and not DOWN of the sensor. When a backup fails i need the sensor to go down.

altaro powershell prtg

Created on Feb 28, 2020 2:01:50 PM by  BartTechne (0) 2

Last change on Feb 28, 2020 7:13:53 PM by  Sven Roggenhofer [Paessler Technical Support]



9 Replies

Votes:

0

Your Vote:

Up

Down

Hi BartTechne,

Did you also assign corresponding limits in the Sensor?

Created on Mar 2, 2020 8:58:56 AM by  Moritz Heller [Paessler Support]



Votes:

0

Your Vote:

Up

Down

Hi,

I changed this towards and Advanced sensor. And then it works. Only one small issue now.. When it goes in to result 0 i get the error channel is not defined...

# Altaro Backup Monitoring
#-------------------
# ------------------
param(
    [string]$ComputerName
    )

$ret = Invoke-Command -ComputerName $ComputerName -ScriptBlock {
$Yesterday = ((Get-Date) - (New-TimeSpan -Day 1))

try { 
    $Geteventlog_Success = (Get-WinEvent -ErrorAction Stop  -FilterHashtable @{LogName='Application';StartTime=$Yesterday;Id=5000,5005,5007,5002}) 
} catch {
   $_.Exception.GetType().FullName
   $Geteventlog_Success = "0"
}
for($i = 0 ; $i -le $Geteventlog_Success.Length; $i++){
    $Id = $Geteventlog_Success[$i].Id
    $Message = $Geteventlog_Success[$i].Message

    Switch ($Id) {
       "5007" { 
                write-host "<prtg>"
                write-host "<channel>Backup</channel>"
                write-host "<error>1</error>"
                write-host "<text>$Message</text>"
                write-host "</prtg>"
                Exit 2
                }

       "5002" { 
                write-host "<prtg>"
                write-host "<channel>Backup</channel>"
                write-host "<error>1</error>"
                write-host "<text>$Message</text>"
                write-host "</prtg>"
                Exit 2 }

       "5001" { 
                write-host "<prtg>"
                write-host "<channel>Backup</channel>"
                write-host "<error>2</error>"
                write-host "<text>$Message</text>"
                write-host "</prtg>"
                Exit 1
                }


       "5000" { 
                write-host "<prtg>"
                write-host "<channel>Backup</channel>"
                write-host "<result>0</result>"
                write-host "<text>$Message</text>"
                write-host "</prtg>"
                Exit 0
                }
        

       "5005" { 
                write-host "<prtg>"
                write-host "<channel>Backup</channel>"
                write-host "<error>1</error>"
                write-host "<text>$Message</text>"
                write-host "</prtg>"
                Exit 0
                }


       "0" {    
                write-host "<prtg>"
                write-host "<channel>Backup</channel>"
                write-host "<error>1</error>"
                write-host "<text>No Backups last 24 hours</text>"
                write-host "</prtg>"
           }
       }
    }
    
}

Created on Mar 2, 2020 9:03:00 AM by  BartTechne (0) 2

Last change on Mar 2, 2020 11:30:48 AM by  Birk Guttmann [Paessler Support]



Votes:

0

Your Vote:

Up

Down

Hi Bart,

Please note that you defined a channel but no result. However, if you want to transmit only a error state, you don't need to enter a certain channel since the error state is always for the entire Sensor.
In addition, I mentioned that you entered "2" in "5001". Please note this is no valid error state. For more detailed information, please take a look at this article.

Created on Mar 3, 2020 7:54:38 AM by  Moritz Heller [Paessler Support]



Votes:

0

Your Vote:

Up

Down

I tried to change this towards an simple EXE sensor.

# Altaro Backup Monitoring
#-------------------
# ------------------
param(
    [string]$ComputerName
    )

$ret = Invoke-Command -ComputerName "S-TEC-MGMT" -ScriptBlock {
$Yesterday = ((Get-Date) - (New-TimeSpan -Day 1))

try { 
    $Geteventlog_Success = (Get-WinEvent -ErrorAction Stop  -FilterHashtable @{LogName='Application';StartTime=$Yesterday;Id=5000,5001,5005,5007,5002}) 
} catch {
   $_.Exception.GetType().FullName
   $Geteventlog_Success = "0"
}
for($i = 0 ; $i -le $Geteventlog_Success.Length; $i++){
    $Id = $Geteventlog_Success[$i].Id
    $Message = $Geteventlog_Success[$i].Message

    Switch ($Id) {
       "5007" { 
                write-host 2:$Message
                Exit 2
                }

       "5002" { 
                write-host 2:$Message
                Exit 2
               }

       "5001" { 
                write-host 1:$Message
                Exit 1
               }

       "0" {    
                write-host 2:$Message
                Exit 2
           }
       default { 
                write-host 0:$Message
                Exit 0
        }
       }
    }
}

But now it does not Exit with 1 ? and PRTG says the sensor is up ? And i want to display a warning. Error 5001 is triggerd.

Created on Mar 4, 2020 3:55:40 PM by  BartTechne (0) 2



Votes:

0

Your Vote:

Up

Down

Hi Bart,

Please note that you set the IDs in the Switch clause in quotes. As a result, powershell interprets it as a string and not as a integer. Therefore, the default clause is always triggered.

Created on Mar 5, 2020 11:39:18 AM by  Moritz Heller [Paessler Support]



Votes:

0

Your Vote:

Up

Down

So i Decided to do a complete overhaul of the script and the functionality is OK. But i have 1 question with baffles me at this time because i can not seem to understand the way PRTG handels EXIT 1 and error values.

Situation. Lets say the backup has a warning ( Event log ID: 5001) -> Exit 1 -> But The sensor in PRTG says Down. Is theire a way that i can tell PRTG when it exits with 1 it only displays a warning and not the value "Down" ?

# Altaro Backup Monitoring
#-------------------
# ------------------

param(
    [string]$ComputerName
    )


$ret = Invoke-Command -ComputerName S-TEC-MGMT -ScriptBlock {

$Yesterday = ((Get-Date) - (New-TimeSpan -Day 1))



try { 
    $Geteventlog_Success = (Get-WinEvent -ErrorAction Stop  -FilterHashtable @{LogName='Application';StartTime=$Yesterday;Id=5000,5001,5005,5007,5002}) 
} 
catch {
   $_.Exception.GetType().FullName
   $Geteventlog_Success = 0
}

$array_Successfull = @()
$array_Failed = @()
$array_FailedOffsite = @()
$array_Warning = @()
$array_SuccessfullOffsite = @()

for($i = 0 ; $i -le $Geteventlog_Success.Length; $i++){

    $Id = $Geteventlog_Success[$i].Id

    Switch ($Id) {
       
       5007 { 
                $array_FailedOffsite += $Geteventlog_Success[$i]
            }

       5002 { 
                $array_Failed += $Geteventlog_Success[$i]
            }

       5001 { 
                $array_Warning += $Geteventlog_Success[$i]   
            }

       5005 { 
                $array_SuccessfullOffsite += $Geteventlog_Success[$i]
            }

       5000 {
                $array_Successfull += $Geteventlog_Success[$i]
            }

        0   {

                write-host "<prtg>"
                write-host "<error>1</error>"
                write-host "<text>No Backups for the last 24 hours</text>"
                write-host "</prtg>"
                Exit 2
        }
    }
}


if($array_FailedOffsite -ne " "){

    for ($j = 0; $j -le $array_FailedOffsite.Length; $j++){
        
        $Id2 = $array_FailedOffsite[$j].Id
        $Message = $array_FailedOffsite[$j].Message

        if ($Id2 = 5007) {
            write-host "<prtg>"
            write-host "<error>1</error>"
            write-host "<text>$Message</text>"
            write-host "</prtg>"
            Exit 2
        }
    }
}
if($array_Failed -ne " "){
    for ($k = 0; $k -le $array_Failed.Length; $k++){
        
        $Id3 = $array_Failed[$k].Id
        $Message = $array_Failed[$k].Message


        if ($Id3 = 5002) {

            write-host "<prtg>"
            write-host "<error>1</error>"
            write-host "<text>$Message</text>"
            write-host "</prtg>"
            Exit 2
        }
    }
}

if($array_Warning -ne " "){
    for ($l = 0; $l -le $array_Warning.Length; $l++){
        
        $Id4 = $array_Warning[$l].Id
        $Message = $array_Warning[$l].Message

        if ($Id4 = 5001) {
            write-host "<prtg>"
            write-host "<error>1</error>"
            write-host "<text>$Message</text>"
            write-host "</prtg>"
            Exit 1
        }
    }
}

if($array_Successfull -ne " "){
    for ($m = 0; $m -le $array_SuccessfullOffsite.Length; $m++){
        
        $Id5 = $array_SuccessfullOffsite[$m].Id
        $Message = $array_SuccessfullOffsite[$m].Message
        
        if ($Id5 = 5005) {
            write-host "<prtg>"
            write-host "<error>1</error>"
            write-host "<text>$Message</text>"
            write-host "</prtg>"
            Exit 0
        }
    }
}

if($array_Successfull -ne " " ) {
    for ($n = 0; $n -le $array_Successfull.Length; $n++){
        
            $Id6 = $array_Successfull[$n].Id
            $Message = $array_Successfull[$n].Message

            if ($Id6 = 5000) {

            write-host "<prtg>"
            write-host "<error>0</error>"
            write-host "<text>$Message</text>"
            write-host "</prtg>"
            Exit 0
            }
        }
    }
}

Created on Mar 12, 2020 8:26:19 AM by  BartTechne (0) 2

Last change on Mar 13, 2020 8:03:45 AM by  Moritz Heller [Paessler Support]



Votes:

0

Your Vote:

Up

Down

Hi Bart,

The exit codes are only for the normal EXE/Script Sensor and not for the EXE/Script Advanced Sensor. If you want to trigger a warning in the advanced Sensor, you can use the "<Warning>" option. For example
Write-host "<prtg>" Write-Host "<result>" Write-Host "<channel>First channel</channel>" Write-Host "<value>10</value>" write-host "<Warning>1</Warning>" Write-Host "</result>" write-host "</prtg>"

Created on Mar 12, 2020 1:51:21 PM by  Moritz Heller [Paessler Support]

Last change on Mar 13, 2020 8:04:15 AM by  Moritz Heller [Paessler Support]



Votes:

0

Your Vote:

Up

Down

is it also possible to pass through variables ?

So we can still see what failed in the sensor details ?

Like:

write-host "<prtg>"
            Write-Host "<result>"
            Write-Host "<channel>Backuo</channel>"
            Write-Host "<value>10</value>"
            write-host "<Warning>1</Warning>"
            Write-Host "</result>"
            Write-Host "<text>$Message</text>"
            write-host "</prtg>"

Created on Mar 12, 2020 1:54:47 PM by  BartTechne (0) 2



Votes:

0

Your Vote:

Up

Down

Hi Bart,

Yes this is possible. I added this option to my example here:

            $message="Place your text here"

            write-host "<prtg>"
            Write-Host "<result>"
            Write-Host "<channel>First channel</channel>"
            Write-Host "<value>10</value>"
            write-host "<Warning>1</Warning>"
            Write-Host "</result>"
            write-host "<Text>$message</Text>"
            write-host "</prtg>"

Created on Mar 13, 2020 8:13:32 AM by  Moritz Heller [Paessler Support]



Please log in or register to enter your reply.


Disclaimer: The information in the Paessler Knowledge Base comes without warranty of any kind. Use at your own risk. Before applying any instructions please exercise proper system administrator housekeeping. You must make sure that a proper backup of all your data is available.