PRTG Custom Notifications: Outbound Calls on “Down” Alarm

The last blog I wrote about custom file sensor to track an abnormally large file and raise alarm based on that helped me gaining more confidence in PRTG. I am now of opinion that good folks at Paessler AG have tried their level best to make it as open as they could when it comes to customization and integration with other systems. It worked great with Powershell to figure out a problem that could collapse one of my applications, and also, it gave me another idea.

Problem Statement

We use SMS and Email as primary notification channels for any warning or down state alarm. I use Nova Launcher on Note 5 having bug of not showing Email Count on my Nine (for MS Exchange) email client. For SMS, we previously had a product that somehow didn’t turn out to be totally compatible as per our requirement, so we’re developing our own at the moment. Further to this, even if both of them work, they’re not ample enough to wake anyone of us in case something serious happens in night (P.S: We don’t entertain night duties). The best communication medium therefore in such duration of entire day is nothing but the GSM or PSTN calls and we decided to use Robot Calls for “Down” state cases.

Pre-Requisites

  • PRTG (Free or Commercial)
  • CTI Integration Knowledge with your Voice System
  • PRTG Admin Access

PRTG Custom Notification Settings

Login with PRTGAdmin Account or any other account with same permission level and go to Setup > Notifications.

2016-03-12 22_15_07-Windows 7 - Dev [Running] - Oracle VM VirtualBox
PRTG Setup Page
Now click on “Add New Notification” button at the bottom of this page.

2016-03-12 22_23_06-Program Manager
Click on “Add New Notification”

Give this Custom Notification a name and trigger action as per your accord. I wanted to have only Down State therefore I selected as per screenshot:

2016-03-12 22_25_10-Windows 7 - Dev [Running] - Oracle VM VirtualBox
Name & Summarization
Set Access Rights as per your environment:

2016-03-12 22_36_50-Windows 7 - Dev [Running] - Oracle VM VirtualBox
Access Rights
Here starts the real part. In notification actions you have to check on Execute Program option. Provide the credential set which is capable of executing this program. In my case, I wrote a Powershell Script that required admin privileges. Notice the Program File name “Notify.ps1” which is our script – the medium of communication between PRTG and External Application. As per Paessler, here you can Select the program that PRTG executes. You can choose from *.exe, *.bat, *.cmd, *.com or *.ps1 files located in the Notifications/exe subfolder of your PRTG installation. If this list is empty, please copy all files you want to appear to the executables directory.

2016-03-12 22_38_44-Windows 7 - Dev [Running] - Oracle VM VirtualBox
Execute Program Setup

PRTG Host Machine Settings

 

Go to C:\Program Files (x86)\PRTG Network Monitor\Notifications\EXE OR C:\Program Files\PRTG Network Monitor\Notifications\EXE depending upon your 32 or 64 bit machine. This is the folder where you have to save your script. Just an idea about how I am doing it, we have a dialer with an option to keep on looking for a new number in DB table and dial it out the moment it finds one. So what I’m doing with this script is to execute a stored procedure in my MS SQL Server to update the records and once dialer finds it updated, there’s an outbound calls on all numbers inserted via stored procedure. The dialer with robot call option uses particular wav file (I generated one from here). You can use any other as per your requirement.

So here’s the Notify.ps1 making the execution of stored procedure possible:

===========================START===========================
$con = new-object "System.data.sqlclient.SQLconnection"
#Set Connection String
$con.ConnectionString =(“Data Source=mssqlserver.mydomain.local;Initial Catalog=HN_MSSQLDB;Integrated Security=SSPI;User ID=username;Password=mypassword”)
$con.open()
$sqlcmd = new-object "System.data.sqlclient.sqlcommand"
$sqlcmd.connection = $con
$sqlcmd.CommandTimeout = 600000
#Let's Call Remote Procedure
$sqlcmd.CommandText = “EXEC [HN_MSSQLDB].[dbo].[UpdatePRTG]”
$rowsAffected = $sqlcmd.ExecuteNonQuery()

#This section you can use for time stamping with little improvement.
$text = "Alarm Raised Again"
$text | Out-File "C:\Program Files (x86)\PRTG Network Monitor\Notifications\EXE\test.txt"
#Exit 0 is important or the custom notification won't work.
exit 0;
============================END============================

To be honest, the script isn’t doing any extraordinarily intelligent stuff. It’s just communicating with SQL Server which further interacts with dialer. But the good thing is that we can do it pretty easily using PRTG.

Bringing it to Action

For some reason, I couldn’t get this part directly from Paessler’s stock documentation, so I have to use their forum from where I got a response pretty quickly within a day. It was simple enough. Simply navigate to the group/device/sensor for which you want to configure this notification, go to Notification Setting and create new notification as per your requirement. In my case, I wanted to do it for all of my machines and all sensors, so I went to the Root level and did my things as under which were then inherited across all the sensors:

2016-03-12 23_46_43-Windows 7 - Dev [Running] - Oracle VM VirtualBox
Select Root Level
And then create Alarm as under:

2016-03-12 23_52_47-Windows 7 - Dev [Running] - Oracle VM VirtualBox
Add Alarm with Custom Notification Created Earlier

Further Ideas

 

PROVIDED that I find some time, I will try to formulate more general standard setting to use minimal Asterisk based VM with SIP Trunk Setup to open the dialer part for organizations that may require it. Luckily, I didn’t have to work hard at this part in my scenario since we’re having Call Center as our core services.

Another idea is to let this setting be part of default PRTG Notification type, i.e. Email, SMS and SIP Calling (where user can provide SIP Details for calling).

 

Advertisements

PRTG Custom Sensor: Alarm for Large File

Requirement

Need to check for any file larger then let’s say 60 Mb and save its name somewhere, and raise alarm on PRTG.

Tools/Environment

Powershell, PRTG, Windows Server 2012 R2.

Powershell Script

Following script will look for any file larger then 60 Mb, of file type wav, in F:\Dir\SubDir\SubDirL2\SubDirL3\ and will save it to F:\Dir\res.txt and keep it on appending it with the results.

##Mention the path to search the files
$path = “F:\Dir\SubDir\SubDirL2\SubDirL3\”
##Find out the files greater than equal to below mentioned size
$size = 60MB
##Limit the number of rows in text file mentioning file names
$limit = 5
##Find out the specific extension file
$Extension = “*.wav”
##script to find out the files based on the above input
$largeSizefiles = get-ChildItem -path $path -recurse -ErrorAction “SilentlyContinue” -include $Extension | ? { $_.GetType().Name -eq “FileInfo” } | where-Object {$_.Length -gt $size} | sort-Object -property length -Descending | Select-Object Name, @{Name=”SizeInMB”;Expression={$_.Length / 1MB}},@{Name=”Path”;Expression={$_.directory}} -first $limit
IF ($largeSizefiles -eq $NULL)

{
$res = “NORMAL”
$date = Get-Date
Out-File -FilePath F:\Dir\res.txt -InputObject $date -Encoding Default
Out-File -FilePath F:\Dir\res.txt -InputObject $res -Encoding Default -Append
}
ELSE
{
$res = “ERROR”
$date = Get-Date -UFormat “%Y%m%d%H%M%S”
Out-File -FilePath F:\Dir\res.txt -InputObject $date -Encoding Default
Out-File -FilePath F:\Dir\res.txt -InputObject $res -Encoding Default -Append
$largeSizefiles | Out-File -FilePath F:\Dir\res.txt -Encoding Default -Append
}

Run Script Periodically

Using Windows Task Scheduler, the script can be run periodically every 5 minutes. Create new task with following settings:

2016-01-28 16_41_52-10.150.10.160 - Remote Desktop Connection

2016-01-28 16_43_49-10.150.10.160 - Remote Desktop Connection

2016-01-28 16_44_25-10.150.10.160 - Remote Desktop Connection.png

 

PRTG Sensor Settings

  • Go to corresponding probe and the machine where you set up the previous Powershell Script.
  • Go to device list of that machine and add new sensor “File Sensor” with following settings:

2016-01-28 16_52_59-60MB+ Recorded File _ Sensor Details _ PRTG

2016-01-28 16_55_12-60MB+ Recorded File _ Sensor Details _ PRTG2016-01-28 16_56_33-60MB+ Recorded File _ Sensor Details _ PRTG.png

Change Scanning interval to your desired time.

Results:

2016-01-28 16_58_39-60MB+ Recorded File _ Sensor Details _ PRTG

The error will be displayed whenever there’s wav file larger then 60 Mb in the location mentioned earlier. You can also look for any word other then “Error” and raise the alarm.

Powershell Script to Check Domain Machines Disk Sizes

We have around 15 servers in the data center all part of single domain. Our support folks used to take their Disk Volume Sized twice a day to send it to Analysis team. They were using Remote Desktop to manually login to take the sizes until I wrote this script to make their lives easier.

Please note that this is an unoptimized, first draft of the script. I will try to further improve and optimize it later on and will include Excel Integration with it.

<#
Script Name:                      SysCheckAuth
Author:                                Maaz Bin Mahmood
Tested Platforms:               Windows 8.1, Windows Server 2012
Dated:                                 26th October 2014
Contact Email:                    pointed.out@gmail.com
#>

<#First step is to declare the authentication. We will be needing Username in Domain\User format and Password that will be prompted in the beginning. We are assuming that all Servers have same password as happened in my case. The IP or Server Name is different for every machine. In case passwords are different too, you will have to prompt for password for every machine.
#>

$UserName = “DOMAIN\user”
$Password = Read-Host -AsSecureString “Enter Your Password:”
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName , $Password

Write-Output “`r`n`r`nGenerating Health Check of Web Server 1… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.1.26 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “C Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.1.26 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.1.26 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.1.26 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Web Server 2… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.169.1.26 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.169.1.26 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.169.1.26 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.169.1.26 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of ACD Server 1… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.1.28 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.1.28 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.1.28 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.1.28 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of ACD Server 2… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.169.1.28 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.169.1.28 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.169.1.28 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.169.1.28 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of SQL Server 1… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalF = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’F:'” | Foreach-Object {$_.size}
$gbTotalF = [int64]$TotalF / 1GB
Write-Output “`r`nF Drive (DB File) Total Capacity: “$gbTotalF | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeF = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’F:'” | Foreach-Object {$_.freespace}
$gbFreeF = [int64]$FreeF / 1GB
Write-Output “`r`nF Drive (DB File) Available Capacity: “$gbFreeF | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalL = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’L:'” | Foreach-Object {$_.size}
$gbTotalL = [int64]$TotalL / 1GB
Write-Output “`r`nL Drive (Log File) Total Capacity: “$gbTotalL | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeL = get-WmiObject win32_logicaldisk -Computername 192.168.1.27 -Credential $Credential -Filter “DeviceID=’L:'” | Foreach-Object {$_.freespace}
$gbFreeL = [int64]$FreeL / 1GB
Write-Output “`r`nL Drive (Log File) Available Capacity: “$gbFreeL | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of SQL Server 2… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalF = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’F:'” | Foreach-Object {$_.size}
$gbTotalF = [int64]$TotalF / 1GB
Write-Output “`r`nF Drive (DB File) Total Capacity: “$gbTotalF | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeF = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’F:'” | Foreach-Object {$_.freespace}
$gbFreeF = [int64]$FreeF / 1GB
Write-Output “`r`nF Drive (DB File) Available Capacity: “$gbFreeF | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalL = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’L:'” | Foreach-Object {$_.size}
$gbTotalL = [int64]$TotalL / 1GB
Write-Output “`r`nL Drive (Log File) Total Capacity: “$gbTotalL | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeL = get-WmiObject win32_logicaldisk -Computername 192.169.1.27 -Credential $Credential -Filter “DeviceID=’L:'” | Foreach-Object {$_.freespace}
$gbFreeL = [int64]$FreeL / 1GB
Write-Output “`r`nL Drive (Log File) Available Capacity: “$gbFreeL | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Slave 1-1… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “C Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Slave 1-2… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.3.41 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.3.41 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.3.41 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.3.41 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Slave 1-3… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.3.40 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Slave 1-4… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.169.3.41 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.169.3.41 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.169.3.41 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.169.3.41 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of FLASH Server… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.1.35 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.1.35 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.1.35 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.1.35 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Recording Server… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.1.40 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.1.40 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.1.40 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.1.40 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalF = get-WmiObject win32_logicaldisk -Computername 192.168.1.40 -Credential $Credential -Filter “DeviceID=’F:'” | Foreach-Object {$_.size}
$gbTotalF = [int64]$TotalF / 1GB
Write-Output “`r`nF Drive (DB File) Total Capacity: “$gbTotalF | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeF = get-WmiObject win32_logicaldisk -Computername 192.168.1.40 -Credential $Credential -Filter “DeviceID=’F:'” | Foreach-Object {$_.freespace}
$gbFreeF = [int64]$FreeF / 1GB
Write-Output “`r`nF Drive (DB File) Available Capacity: “$gbFreeF | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Telepoti Server 1… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.168.1.32 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.168.1.32 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.168.1.32 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.168.1.32 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

Write-Output “`r`n`r`nGenerating Health Check of Telepoti Server 2… Please wait`r`n_____________________________________________________________`n`r`n” | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append
$TotalC = get-WmiObject win32_logicaldisk -Computername 192.169.1.32 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.size}
$gbTotalC = [int64]$TotalC / 1GB
Write-Output “`r`nC Drive Total Capacity: “$gbTotalC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeC = get-WmiObject win32_logicaldisk -Computername 192.169.1.32 -Credential $Credential -Filter “DeviceID=’C:'” | Foreach-Object {$_.freespace}
$gbFreeC = [int64]$FreeC / 1GB
Write-Output “`r`nC Drive Available Capacity: “$gbFreeC | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$TotalD = get-WmiObject win32_logicaldisk -Computername 192.169.1.32 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.size}
$gbTotalD = [int64]$TotalD / 1GB
Write-Output “`r`nD Drive Total Capacity: “$gbTotalD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

$FreeD = get-WmiObject win32_logicaldisk -Computername 192.169.1.32 -Credential $Credential -Filter “DeviceID=’D:'” | Foreach-Object {$_.freespace}
$gbFreeD = [int64]$FreeD / 1GB
Write-Output “`r`nD Drive Available Capacity: “$gbFreeD | Tee-Object -FilePath  $PSScriptRoot\output.txt -Append

PPTP Client Setup on CentOS

It can be simple or complicated. For complicated there’s Google. But if for some reason you’ve reach here on this page, here’s the simple way to configure yout PPTP VPN on CentOS.

First, search for yum package for your OS using:

yum search pptp

You may find different results. Go for one with something like pptp.i686 or pptp.x86_64 (you’re not going to see both of them rather just one depending upon your machine processor architecture, i.e. 32 bit or 64 bit). Assuming that yours is x86, you will have to go with:

yum -y install pptp.i686

Once done, install pptp-setup to simplify the whole PPTP Client Setup:

yum -y install pptp-setup

That’s it. Installation part is done. Now to start VPN Client:
pptpsetup –create your_vpn_connection_name –server vpn_server_hostname_or_ip –username your_vpn_server_username –password your_vpn_server_password –encrypt –start

After this, don’t forget to route your traffic to VPN. You have to delete the current default route first:

route del default

and then add the new one pointing to your PPTP device:

 

route add default dev ppp0

That’s it. You’re encrypted and anonymous on your ISP now (except deep packet filtering ones).

To stop the pptp service:

pptpsetup –delete yout_vpn_connection_name

Don’t forget to add back the default gateway (assuming that your eth0 IP is 10.0.8.166), followed by Network Service restart:

route add default gateway 10.0.8.166 eth0

service network restart

Ubuntu 13.10 Desktop Capture

I had to create a video and tried couple of applications on Ubuntu 13.10 to record my desktop session. A little Googling suggested RecordMyDesktop and Istanbul as being the best in the business, however, due to some reasons (probably due to Unity interface) both didn’t work for me.

In the end I have to come up with a command line option (proving it to be my best friend). If by any means, you’re facing the same issue, just try to use ffmpeg with switches as under:

ffmpeg -y -f alsa -ac 2 -i pulse -f x11grab -r 25 -s 1920×1080 -i :0.0 -vcodec libx264 -vpre lossless_ultrafast -crf 22 -acodec libmp3lame -ar 44100 -ab 126k -threads 3 ~/Desktop/screencast.mkv

And if you’re a bit more curious about the CLI Switches, here are the details so that you can modify it as per your own requirement:

‘-y (global)’

Overwrite output files without asking.

‘-f fmt (input/output)’

Force input or output file format. The format is normally auto detected for input files and guessed from the file extension for output files, so this option is not needed in most cases.

‘-ac[:stream_specifierchannels (input/output,per-stream)’

Set the number of audio channels. For output streams it is set by default to the number of input audio channels. For input streams this option only makes sense for audio grabbing devices and raw demuxers and is mapped to the corresponding demuxer options.

‘-i input file’

Input file name

‘-r rate’

Set frame rate (Hz value, fraction or abbreviation)

‘-o Output file’

Output file name

‘-vcodec codec (output)’

Set the video codec. This is an alias for -codec:v.

‘-vpre codec (output)’

Preset Codec Suboptions

‘-crf float

Enables constant quality mode, and selects the quality (x264)

‘-acodec codec (input/output)’

Set the audio codec. This is an alias for -codec:a.

‘-ar[:stream_specifierfreq (input/output,per-stream)’

Set the audio sampling frequency. For output streams it is set by default to the frequency of the corresponding input stream. For input streams this option only makes sense for audio grabbing devices and raw demuxers and is mapped to the corresponding demuxer options.

‘-ab int’

Set bitrate (may be deprecated in your version, use -b instead in this case)

‘-threads count’

Threads Count

 

Update: After playing with couple of options, I used this one to avoid large file sizes. I didn’t need any voice though.

 

ffmpeg -y -f alsa -ac 2 -i pulse -f x11grab -r 17 -s 1920×1080 -i :0.0 -vcodec libx264 -crf 11 -acodec libmp3lame -ar 2250 -ab 163k -threads 3 ~/Desktop/screencast2.mkv