Table of Contents

STOP / Start Email Instance

}

Summary

This script is a way to automate the Email Instance of ECE to Stop and Start. This achieves the same thing which can be done manually via the SPOG GUI - as outlined below.

Setup

Task Scheduler Setup

To Stop the Instance use the Script Argument “stop” To Start the Instance use the Script Argument “Start”

To Stop the Email Instance

ACTION - Program/Script =

"C:\Program Files\PowerShell\7\pwsh.exe"

Arguments =

"C:\ScriptFolder\ECE-Email-Dispatcher-Stop-Start\ECE-Email-Stop-Start_TST.ps1" stop

To Start the Email Instance

ACTION - Program/Script =

"C:\Program Files\PowerShell\7\pwsh.exe"

Arguments =

"C:\ScriptFolder\ECE-Email-Dispatcher-Stop-Start\ECE-Email-Stop-Start_TST.ps1" start

Script

ece-email-pause-and-resume.ps1
# Author : Gerard O'Rourke
# 16/04/2021
# Version 1.00
# 
# Notes
# -----------------------------------------------------------------
# Status Code for Successful Login and Logout: 204
# Status Code for Successful STOP / START of DX Instance: 202
# -----------------------------------------------------------------
#
# Create a dedicated partition administration user account on ECE
# Use Powershell 7 for this script.
 
 
$ECE_HOST = 'ece-webserver.example.com'
$DX_INSTANCE = '998'
$AUTH_BODY = '{"userName": "pa_tst_api","password": "4p6hVfwDsp2fsdfsT"}'
 
$ECE_LOGIN_URL = "https://$ECE_HOST/system/ws/v19/authentication/user/login?forceLogin=yes"
$ECE_LOGOUT_URL = "https://$ECE_HOST/system/ws/v19/authentication/user/logout"
$ECE_DISPATCHER_INSTANCE_STOP_URL = "https://$ECE_HOST/system/ws/v19/administration/service/instance/$DX_INSTANCE/stop"
$ECE_DISPATCHER_INSTANCE_START_URL = "https://$ECE_HOST/system/ws/v19/administration/service/instance/$DX_INSTANCE/start"
 
 
$SMTP_SERVER = 'mailserver.example.com'
$EMAIL_FROM = 'ECE TEST API Script <[email protected]>'
$EMAIL_TO = 'Gerry ORourke <[email protected]>','Banana Boo <[email protected]>'
 
$CONTENT_TYPE = "application/json"
$timeNow = (get-date).ToString('T')
$errorCode = 0
 
#Email Function
function SendEmail{
	Send-MailMessage -From $EMAIL_FROM  -To $EMAIL_TO -Subject $EMAIL_SUBJECT -Body $EMAIL_BODY -SmtpServer $SMTP_SERVER 
}
 
# Check Argument 'stop' or 'start' has been set.
if (($args[0] -eq 'stop') -or ($args[0] -eq 'start'))
{
	echo "Attempting to $args the Email Dispatcher Instance"
}
else
{
	echo "You must pass the parameter 'stop' or 'start' for this app to function."
	echo "Pausing for 10 seconds before exiting..."
	exit
}
 
##### LOGIN #####
try
{
	$LoginRequest = Invoke-WebRequest -SkipCertificateCheck -uri $ECE_LOGIN_URL -Method 'POST' -ContentType $CONTENT_TYPE -Body $AUTH_BODY
    $StatusCode = $LoginRequest.StatusCode
}
catch
{
    $StatusCode = $_.Exception.Response.StatusCode.value__
}
 
if ($StatusCode -eq "204") 
{
	#Login Successful 
	echo "Login Successful."
	$AUTH_TOKEN = $LoginRequest.Headers["X-egain-session"]
	echo "The 'X-egain-session' AuthToken is: $AUTH_TOKEN"
}
else
{
	#Login Failed
	echo "Login Failed. Status Code: $StatusCode"
	$EMAIL_BODY = "Failed Login. The Status Code Returned was $StatusCode. Time: $timeNow"
	$EMAIL_SUBJECT = "ECE API Script - Failed Login."
	SendEmail
	echo "Notification Email Sent."
	exit
}
 
 
##### STOP Dispatcher Instance #####
if ($args[0] -eq 'stop')
{
	try
	{
		$StopRequest = Invoke-WebRequest -SkipCertificateCheck -Method 'PUT' -ContentType $CONTENT_TYPE -Headers @{'X-egain-session' = "$AUTH_TOKEN"} -uri $ECE_DISPATCHER_INSTANCE_STOP_URL
		$StatusCode = $StopRequest.StatusCode
        #$Content = $StopRequest.Content
	}
	catch
	{
		$StatusCode = $_.Exception.Response.StatusCode.value__
		$ResponseHeaders = $_.Exception.Response
        $ResponseBody = $_.ErrorDetails.Message
	}
 
	if ($StatusCode -eq "202") 
	{
		#Stopped Successful 
		echo "Stopped ECE Distpatcher Instance Successful."
	}
	else
	{
		#Stopped Failed
		echo "Email Distpatcher Stop Request Failed.`nStatus Code: $StatusCode.`nDetails: $ResponseBody"
 
        echo "---"
        echo "$ResponseBody"
        echo "---"
		$EMAIL_BODY = "Email Distpatcher Stop Request Failed.`nStatus Code: $StatusCode.`nTime: $timeNow.`nDetails: $ResponseBody"
		$EMAIL_SUBJECT = 'ECE API Script - Failed to Stop Dispatcher'
		SendEmail
		echo "Notification Email Sent."
        $errorCode = 1
	}
}
 
 
##### START Dispatcher Instance #####
if ($args[0] -eq 'start')
{
	try
	{
		$StartRequest = Invoke-WebRequest -SkipCertificateCheck -Method 'PUT' -ContentType $CONTENT_TYPE -Headers @{'X-egain-session' = "$AUTH_TOKEN"} -uri $ECE_DISPATCHER_INSTANCE_START_URL
		$StatusCode = $StartRequest.StatusCode
	}
	catch
	{
		$StatusCode = $_.Exception.Response.StatusCode.value__
		$ResponseHeaders = $_.Exception.Response
        $ResponseBody = $_.ErrorDetails.Message
	}
 
	if ($StatusCode -eq "202") 
	{
		#Start Instance Successful 
		echo "Started ECE Distpatcher Instance Successful."
	}
	else
	{
		#Start Instance Failed
		echo "Email Distpatcher Start Request Failed. Status Code: $StatusCode"
		$EMAIL_BODY = "Email Dispatcher Start Request Failed.`nStatus Code: $StatusCode.`nTime: $timeNow.`nDetails: $ResponseBody"
		$EMAIL_SUBJECT = 'ECE API Script - Failed to Start Dispatcher'
		SendEmail
		echo "Notification Email Sent."
        $errorCode = 1
	}
}
 
##### Logout #####
try
{
	$LogoutRequest = Invoke-WebRequest -SkipCertificateCheck -Method 'DELETE' -ContentType $CONTENT_TYPE -Headers @{'X-egain-session' = "$AUTH_TOKEN"} -uri $ECE_LOGOUT_URL 
	$StatusCode = $LogoutRequest.StatusCode
}
catch
{
	$StatusCode = $_.Exception.Response.StatusCode.value__
}
 
if ($StatusCode -eq "204") 
{
	#Logout Successful 
	echo "Logged Out Successfully."
    echo "errorCode: $errorCode"
	if ($args[0] -eq 'stop' -And $errorCode -eq 0)
	{
		$EMAIL_BODY = "Email Dispatcher Successfully Stopped. Time: $timeNow"
		$EMAIL_SUBJECT = 'ECE API Script - Successfully Stopped Email Dispatcher Instance'
	SendEmail
	echo "Notification Email Sent."
	}
	if ($args[0] -eq 'start' -And $errorCode -eq 0)
	{
		$EMAIL_BODY = "Email Dispatcher Successfully Started. Time: $timeNow"
		$EMAIL_SUBJECT = 'ECE API Script - Successfully Started Email Dispatcher Instance'
	SendEmail
	echo "Notification Email Sent."
	}
	exit
}
else
{
	#Logout of the Instance Failed
	echo "Logging out of the API has Failed. Status Code: $StatusCode"
	$EMAIL_BODY = "Email Dispatcher Logout Request Failed. Status Code: $StatusCode. Time: $timeNow"
	$EMAIL_SUBJECT = 'ECE API Script - Failed to Logout'
	SendEmail
	echo "Notification Email Sent."
	exit
}