Wednesday, March 1, 2017

Server services uptime load monitoring script

if ((Get-PSSnapin "Citrix.XenApp.Commands" -EA silentlycontinue) -eq $null) {
    try { Add-PSSnapin Citrix.XenApp.Commands -ErrorAction Stop }
    catch { write-error "Error loading XenApp Powershell snapin"; Return }
}

##############################################################################################

$email = "" | Select Host,From,To,Subject,Body,Attachment
$alertFilename="C:\scripts\Prod_monitor\astro_mon.htm"
$emailSubject="AUS - CITRIX SERVERS REPORT"
$emailFrom = "AProdCitrix@amds.com"
$emailTo = "vijayi@amd.com"
$emailhost = "11.21.12.26"


function sendemail ($astrorptemail) {
    $SmtpClient = new-object system.net.mail.smtpClient
    $SmtpClient.host = $emailhost
    $msg = new-object system.net.mail.MailMessage
    $msg.From = $emailFrom
    $msg.To.Add($emailTo)
    $msg.Subject = $emailSubject
    $msg.Body = Get-Content $alertFilename
    $msg.IsBodyHtml = "True"
    $SmtpClient.Send($msg)
}

###############################################################################

Clear-Content C:\Scripts\Prod_Monitor\pingresult.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)
    {
     add-content C:\Scripts\Prod_Monitor\pingresult.txt "SUCCESS"
    }

    else
    {
     add-content C:\Scripts\Prod_Monitor\pingresult.txt "UNREACHABLE"
    }

}

###############################################################################

Clear-content C:\Scripts\Prod_Monitor\uptime.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)

    {
    $Computerobj = "" | select ComputerName, Uptime, LastReboot
    $wmi = Get-WmiObject -ComputerName $server -Query "SELECT LastBootUpTime FROM Win32_OperatingSystem"
    $now = Get-Date
    $boottime = $wmi.ConvertToDateTime($wmi.LastBootUpTime)
    $uptime = $now - $boottime
    $d =$uptime.days
    $h =$uptime.hours
    $m =$uptime.Minutes
    $s = $uptime.Seconds
    $Computerobj.ComputerName = $server
    $Computerobj.Uptime = "$d Days $h Hours $m Min $s Sec"
    $Computerobj.LastReboot = $boottime
    $Computerobj | Select Uptime | foreach {$_.Uptime} | add-content C:\Scripts\Prod_Monitor\uptime.txt
    }
    else
    {
    add-content C:\Scripts\Prod_Monitor\uptime.txt "UNREACHABLE"
    }
   
 }

###############################################################################

Clear-Content C:\Scripts\Prod_Monitor\sessions.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)

    {
    $SessionCount = Get-XAServer $server -full | select servername,Sessioncount | sort servername | Select Sessioncount | foreach {$_.Sessioncount}

| Add-Content C:\Scripts\Prod_Monitor\sessions.txt
    }
    else
    {
    Add-Content C:\Scripts\Prod_Monitor\sessions.txt "UNREACHABLE"
    }
}

###############################################################################

Clear-Content C:\Scripts\Prod_Monitor\logonmode.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)

    {
    $LogonMode = Get-XAServer $server | Select ServerName, LogOnMode | sort ServerName | Select LogOnMode | foreach {$_.Logonmode} | Add-

Content C:\Scripts\Prod_Monitor\logonmode.txt
    }
    else
    {
    Add-Content C:\Scripts\Prod_Monitor\logonmode.txt "UNREACHABLE"
    }
}

###############################################################################

Clear-Content C:\Scripts\Prod_Monitor\serverload.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)

    {
    $ServerLoad = Get-XAServerload $server | Sort Servername | Select Load | foreach {$_.Load} | Add-Content C:\Scripts\Prod_Monitor\serverload.txt
    }
    else
    {
    Add-Content C:\Scripts\Prod_Monitor\serverload.txt "UNREACHABLE"
    }
}

###############################################################################

Clear-Content C:\Scripts\Prod_Monitor\imaservice.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)

    {
    $IMAService = get-service -comp $server | where-object {$_.Name -eq "IMAService"} | Select Status | foreach {$_.Status} | Add-Content C:

\Scripts\Prod_Monitor\imaservice.txt
    }
    else
    {
    Add-Content C:\Scripts\Prod_Monitor\imaservice.txt "UNREACHABLE"
    }
}

###############################################################################

Clear-Content C:\Scripts\Prod_Monitor\xmlservice.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)

    {
    $XMLService = get-service -comp $server | where-object {$_.Name -eq "CtxHttp"} | Select Status | foreach {$_.Status} | Add-Content C:\Scripts

\Prod_Monitor\xmlservice.txt
    }
    else
    {
    Add-Content C:\Scripts\Prod_Monitor\xmlservice.txt "UNREACHABLE"
    }
}

###############################################################################

Clear-Content C:\Scripts\Prod_Monitor\spoolerservice.txt

$prdgate = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt

foreach ($server in $prdgate)

{
    $result = Get-WmiObject Win32_PingStatus -filter "address='$server'"

    if ($result.statuscode -eq 0)

    {
    $SpoolerService = get-service -comp $server | where-object {$_.Name -eq "Spooler"} | Select Status | foreach {$_.Status} | Add-Content C:

\Scripts\Prod_Monitor\spoolerservice.txt
    }
    else
    {
    Add-Content C:\Scripts\Prod_Monitor\spoolerservice.txt "UNREACHABLE"
    }
}
 
###############################################################################

$server = Get-Content C:\Scripts\Prod_Monitor\xenservers.txt
$Sessions = Get-Content C:\Scripts\Prod_Monitor\sessions.txt
$Logon = Get-Content C:\Scripts\Prod_Monitor\logonmode.txt
$Load = Get-Content C:\Scripts\Prod_Monitor\serverload.txt
$Ping = Get-Content C:\Scripts\Prod_Monitor\pingresult.txt
$IMA = Get-Content C:\Scripts\Prod_Monitor\imaservice.txt
$XML = Get-Content C:\Scripts\Prod_Monitor\xmlservice.txt
$Spooler = Get-Content C:\Scripts\Prod_Monitor\spoolerservice.txt
$Uptime = Get-Content C:\Scripts\Prod_Monitor\uptime.txt

#######################################################################################

$a = "<style>"
$a = $a + "BODY{background-color:#D7D8D8;}"
$a = $a + "TABLE{text-align: center;border-width: 1px;border-style: solid;border-color: black;border-collapse: separate;}"
$a = $a + "TH{border-width: 1px;padding: 5px;border-style: solid;border-color: White;white;font-face:verdana;font-size:11pt;font-style: bold; color:

white;background-color:#084B8A}"
$a = $a + "TD{border-width: 1px;padding: 5px;border-style: solid;border-color: White;font-face:verdana;font-size:10pt;font-weight:bold;font-style:

bold; color: #151515;}"
$a = $a + "</style>"

function Combine-Arrays($headers,$array1,$array2,$array3,$array4,$array5,$array6,$array7,$array8,$array9)
{
    for($index=0;$index -lt $array1.Count;$index++){
        New-Object PSObject -property @{
        $headers[0]=$array1[$index]
        $headers[1]=$array2[$index]
                $headers[2]=$array3[$index]
        $headers[3]=$array4[$index]
            $headers[4]=$array5[$index]
                $headers[5]=$array6[$index]
                $headers[6]=$array7[$index]
                $headers[7]=$array8[$index]
                $headers[8]=$array9[$index]
        }
    }
}

$headers = "ServerName","Logons","ServerLoad","PING","IMA_Service","XML_Service","Spooler_service", "ActiveSessions", "Uptime"

$body = Combine-Arrays $headers $Server $Logon $Load $Ping $IMA $XML $Spooler $Sessions $Uptime | ConvertTo-Html -fragment

$colorTagTable = @{Stopped = ' bgcolor="#ff0000">Stopped<';
                   Running = ' bgcolor="#00ff00">RUNNING<';
                   ProhibitLogOns = ' bgcolor="#ff0000">DISABLED<';
           AllowLogOns = ' bgcolor="#00ff00">ENABLED<';
                   SUCCESS = ' bgcolor="#00ff00">SUCCESS<';
                   FAILURE = ' bgcolor="#ff0000">FAILURE<';
                   UNREACHABLE = ' bgcolor="#ff0000">UNREACHABLE<';
                  
                   }

$colorTagTable.Keys | foreach { $body = $body -replace ">$_<",($colorTagTable.$_) }

"<br><br>" | out-file "C:\Scripts\Prod_Monitor\astro_mon.htm"

Get-date | out-file "C:\Scripts\Prod_Monitor\astro_mon.htm" -append

"<br><br>" | out-file "C:\Scripts\Prod_Monitor\astro_mon.htm" -append

ConvertTo-HTML -head $a -body "$body" | Out-File "C:\Scripts\Prod_Monitor\astro_mon.htm" -append

sendemail $astrorptemail



No comments:

Post a Comment