xen.ps1 - powershell script by ActiveXperts Software
xen.ps1 checks a counter on a Xen server or a Virtual Maching running on a Xen server.
Use xen.ps1 directly from ActiveXperts Network Monitor; in the Manager's 'Monitor' menu, select 'New Check (Script)' and select xen.ps1. Configure the required parameter, or press 'Load a working sample'.
In ActiveXperts Network Monitor, Administrators can use three different scripting languages: Powershell, VBScript and SSH.
xen.ps1 script code
################################################################################# # ActiveXperts Network Monitor PowerShell script, © ActiveXperts Software B.V. # For more information about ActiveXperts Network Monitor, visit the ActiveXperts # Network Monitor web site at http://www.activexperts.com ################################################################################# # Script # Xen.ps1 # Description: # This script checks a counter on a Xen server or a Virtual Maching running on a Xen server # The following Counters are available: # 100: CPU usage in percent (Use Context: NO) # 200: Memory usage in percent (Use Context: NO) # 201: Available memory in MB (Use Context: NO) # 202: Memory used in MB (Use Context: NO)# # 350: Current Network Receiving rate in kbps (Use Context: YES) # 351: Current Network Transmitting rate in kbps (Use Context: YES) # 400: Current Disk usage in percent (Use Context: YES) # 401: Available disk space in Mb (Use Context: YES) # 402: Used disk space in Mb (Use Context: YES) # 501: Determine whether virtual machine is powered (Use Context: NO) # Values: # 0: Off # 1: On # 2: Suspended # 502: Determine whether VM Guest Tools is running on Virtual Machine (Use Context: NO) # Values: # 0: Not Running # 1: Running # Declare Parameters: # 1) strServer (string) - Hostname or IP address of the Xen Server you want to monitor (Server name will be used as ServerCredentials aswell) # (To define Server Credentials, choose in the Manager application, create a 'new Monitoring Check', Pick the 'Xen' check and add the credentials.) # 2) strVM (string) - VirtualMachine to check, leave empty for Xen Server # 3) nCounterID (int) - The counter you want to check (See Description for ID's) # 4) strContext (string) - The context, leave empty if context is not allowed (See Description) # 5) strOperator (string) - The operator e.g.: -eq, -lt, -gt, -ge, -le, -ne # 6) nValue (int) - The Value # Usage: # .\Xen.ps1 '<server>' '<VM>' <counterID> '<context>' '<operator>' <value> # Sample: # .\Xen.ps1 'xen02' '' 100 '' '-lt' 70 ################################################################################# # -- Declare Parameters param( [string]$strServer = '', [string]$strVM = '', [int]$nCounterID = -1, [string]$strContext = '', [string]$strOperator = '', [int]$nValue = -1 ) # -- Use _activexperts.ps1 with common functions . 'C:\Program Files\ActiveXperts\Network Monitor\Scripts\Monitor (ps1)\_activexperts.ps1' ################################################################################# # // --- Main script --- ################################################################################# # -- Clear screen and clear error cls $Error.Clear() # -- Validate parameters, return on parameter mismatch if( $strHost -eq '' -or $strVM -eq '' -or $nCounterID -lt 0 -or $strOperator -eq '' -or $nValue -lt 0 ) { $res = 'UNCERTAIN: Parameter error - Usage: .\Xen.ps1 "<Hostname | IP>" "<VM>" <counterID> "<context>" "<operator>" <value>' echo $res exit } $objXen = new-object -comobject AxNetwork.Xen $objServerCredentials = new-object -comobject ActiveXperts.NMXenCredentials # Check CounterID if( -not ( AxIsCounterIDValid( $nCounterID ) ) ) { $res = 'UNCERTAIN: Invalid Counter specified please see description of this check to see all the available counters' echo $res exit } # Check Operator if( -not ( AxIsOperatorValid( $strOperator ) ) ) { $res = 'UNCERTAIN: Invalid Operator specified[' + $strOperator + ']. Please use one of the following operators: -eq, -lt, -gt, -ge, -le, -ne' echo $res exit } # Check if Context is allowed or required if( $objXen.isContextAllowed( $nCounterID ) -and $strContext -eq '' ) { $res = 'UNCERTAIN: Context expected for Counter[' + $nCounterID + ']' echo $res exit } elseif( ( -not $objXen.isContextAllowed( $nCounterID ) ) -and $strContext -ne '' ) { $res = 'UNCERTAIN: Context is not allowed for Counter[' + $nCounterID + ']' echo $res exit } # Get credentials and check if credentials exists $strAccount = $objServerCredentials.GetLogin( $strServer ) $strPassword = $objServerCredentials.GetPassword( $strServer ) if( $strAccount -eq '' ) { $res = 'UNCERTAIN: No Xen credentials defined for [' + $strServer + ']. In the Manager application, create a "new Monitoring Check", Pick the "Xen ESXi" check and add the credentials.' echo $res exit } # Initialize the Xen object $objXen.Initialize() if( $objXen.LastError -ne 0 ) { $res = 'UNCERTAIN: Unable to Initialize Xen object, reason: ' + $objXen.LastError + ' : ' + $objXen.GetErrorDescription( $objXen.LastError ) echo $res exit } $objXen.Server = $strServer $objXen.ServerAccount = $strAccount $objXen.ServerPassword = $strPassword # Connect to Xen Server $objXen.Connect() if( $objXen.LastError -ne 0 ) { $objXen.Disconnect() $objXen.Shutdown() $res = 'UNCERTAIN: Unable to Connect to server[' + $strServer + '], reason: ' + $objXen.LastError + ' : ' + $objXen.GetErrorDescription( $objXen.LastError ) echo $res exit } # Get counter value $nVMValue = $objXen.GetPerfData( $strVM, $nCounterID, $strContext ) if( $objXen.LastError -ne 0 ) { $objXen.Disconnect() $objXen.Shutdown() $res = 'UNCERTAIN: Unable to retrieve counter value of counter [' + $nCounterID + '] of VM [' + $strVM + '] on server [' + $strServer + '], reason: ' + $objXen.LastError + ' : ' + $objXen.GetErrorDescription( $objXen.LastError ) echo $res exit } $strTranslaterOperator = AxTranslateOperatorToText( $strOperator ) if( $strVM -eq '' ) { $strServerClient = $strServer } else { $strServerClient = $strVM } # Compare user given value with the Counter value to see if it meets the user given criteria if( compareValue $strOperator $nVMValue $nValue ) { $res = 'SUCCESS: ' + $objXen.GetCounterDescription($nCounterID) + ' ' + $nVMValue + ' IS ' + $strTranslaterOperator + ' ' + $nValue + ' ON[' + $strServerClient + ']' } else { $res = 'ERROR: ' + $objXen.GetCounterDescription($nCounterID) + ' ' + $nVMValue + ' IS NOT ' + $strTranslaterOperator + ' ' + $nValue + ' ON[' + $strServerClient + ']' } echo $res # Disconnect en Shutdown the connection $objXen.Disconnect() $objXen.Shutdown() ################################################################################# # // --- Catch script exceptions --- ################################################################################# trap [Exception] { $res = 'UNCERTAIN: ' + $_.Exception.Message echo $res exit }