Table of Contents

Windows PowerShell

Self Signed Certs

$params = @{
    DnsName = 'www.fabrikam.com', 'www.contoso.com'
    CertStoreLocation = 'Cert:\LocalMachine\My'
}
New-SelfSignedCertificate @params

Other

Handy Powershells Commands

CCE-WinServer-GatherSoftwareInfo.ps1

CCE-WinServer-GatherSoftwareInfo.ps1
# Retrieve Server Software using the Utility UninstallView.exe - https://www.nirsoft.net/utils/uninstall_view.html
 
# Gerard O'Rourke
# Date 24/03/2021
# Version 1.1
 
$version=1.1
$utilityPath = "C:\X-Support\Utilities\UninstallView"
$currentFolder=Get-Location
$tempFolder = "$currentFolder\temp"
$finalFolder = "$currentFolder\ServerSoftwareReport"
$outputFileName="WinServerSoftwareDetails_$(get-date -f yyyy-MM-dd_HH-mm-ss).csv"
$waitTimer=30
 
$servers = "ucce-lab-rgr-a","ucce-lab-hds-a"
 
Write-Output "Software Retrieval Powershell Script"
Write-Output "Version: $version`n"
Write-Output "Starting..."
 
If(!(test-path $tempFolder))
{
      New-Item -ItemType Directory -Force -Path $tempFolder
}
 
Write-Output "Removing Temp Folder of any CSV files before creating new files..."
Remove-Item $tempFolder\*.csv
 
foreach ($server in $servers)
{
Write-Output "Polling Server $server"
& $utilityPath\UninstallView.exe /LoadFrom 4 /ComputerName $server /AutoStartRemoteRegistry 1 /LoadingSpeed 3 /scomma "$tempFolder\$server.csv"
Start-Sleep -s 1
}
 
Write-Output "Waiting $waitTimer seconds for Output Files to be created...."
Start-Sleep -s $waitTimer
 
Write-Output "Adding Filename to a Column in the CSV File"
foreach ($server in $servers)
{
 
if ($server -like '*rgr*') {
	$component="Rogger"
	$type="CCE"
	}
	elseif ($server -like '*hds*') {
	$component="AW-HDS-DDS"
	$type="CCE"
	}
	elseif ($server -like '*pg*') {
	$component="PG"
	$type="CCE"
	}
	elseif ($server -like '*ops*') {
	$component="CVP Ops"
	$type="CVP"
	}
	elseif ($server -like '*cvp*') {
	$component="CVP CallServer"
	$type="CVP"
	}
	else{
		$component="UNKNOWN"
		$type="UNKNOWN"
	}
 
		$CSV = Import-CSV -Path $currentFolder\temp\$server.csv
		$CSV | Select-Object *,@{N='ComputerName';Expression={$server}},@{N='Type';Expression={$type}},@{N='Component';Expression={$component}} | Export-CSV $tempFolder\$server.csv -NoTypeInformation
}
 
 
Write-Output "Merging Data into one CSV File"
If(!(test-path $finalFolder))
{
      New-Item -ItemType Directory -Force -Path $finalFolder
}
 
Get-ChildItem -Filter .\temp\*.csv | Select-Object -ExpandProperty FullName | Import-Csv | Export-Csv $finalFolder\$outputFileName -NoTypeInformation -Append
 
echo If the scrpit has run successfully, the report will be available in the folder $finalFolder
echo If the Report Name is: $outputFileName
 
 
Write-Output "Finished! Pausing for 10 seconds..."
Start-Sleep -s 10

Stop / Start ECE Email Dispatcher Instance

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
}