STOP / Start Email Instance
Note the below PowerShell script uses eGain Non Published Administration API - so the use of this would not officially be supported
}
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
- Create a dedicated ECE Partition administrator account, e.g. pa_api or similar (pa_tst_api in below script)
- Install PowerShell 7
- Configure the relevant parameters in the PowerShell script below and configure as a scheduled task - to stop and resume when required. e.g. Stop at 8pm, Start at 8am.
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 }
