# 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_TO = 'Gerry ORourke ','Banana Boo ' $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 }