PoshCode Archive  Artifact [a9d188931d]

Artifact a9d188931d37e0d3724c51bbec1704e3e30da787f4bca9a2ef81bbe2c48dfbb1:

  • File Mail-Signature-Service.ps1 — part of check-in [eabdd5b499] at 2018-06-10 14:12:52 on branch trunk — Use your favourite ISE to compile into a service, uses signature generation function here: https://t.co/VRDUon5NDP (user: _rov3 size: 3970)

# encoding: ascii
# api: powershell
# title: Mail Signature Service
# description: Use your favourite ISE to compile into a service, uses signature generation function here: https://t.co/VRDUon5NDP
# version: 0.1
# type: script
# author: _rov3
# license: CC0
# x-poshcode-id: 6313
# x-archived: 2016-06-16T21:05:16
# x-published: 2016-04-21T20:52:00
#
#
## CONFIG START ##
	
	# Service messages and logging variables.
	$timeNow = get-date -Format g
	$serviceStop =  $timeNow + " Service has stopped."
	$serviceStart =  $timeNow + " Service has started."
	
	$PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
	Set-Location -Path "$PSScriptRoot"
		
	# Load configuration XML
	[xml]$configfile = Get-Content configuration.xml
	
	# Load createSignature function
	Import-Module $configfile.settings.modulepath
	
	# If siglogs do not exist create them.
	
	if ((Test-Path $configfile.settings.siglog) -eq $false) {
		New-Item $configfile.settings.siglog -type file
		}
	
	if ((Test-Path $configfile.settings.siglogerror) -eq $false) {
		New-Item $configfile.settings.siglogerror -type file
		}
	
	# If Tempdir does not exist create it.
	
	if ((Test-Path $configfile.settings.tempdir) -eq $false) {
		New-Item $configfile.settings.tempdir -type folder
		}
	
	# If output path is not found log and stop service.
	
	if ((Test-Path $configfile.settings.outputdir) -eq $false) {
		"Error`: Output path is invalid. Please check configuration.xml and restart service." | Out-File $configfile.settings.siglogerror -Append
		$serviceStop | Out-File $configfile.settings.siglogerror -Append
		break
		}
	
	# If module is not found log and stop service.
	
	if ((Test-Path $configfile.settings.modulepath) -eq $false) {
		"Error`: createSignature.psm1 not found. Please check configuration.xml and restart service." | Out-File $configfile.settings.siglogerror -Append
		$serviceStop | Out-File $configfile.settings.siglogerror -Append
		break
		}
	
	# Load created signatures log.
	$sigLog = Get-Content -path $configfile.settings.siglog
	
## CONFIG END ##
		
# Log service start.

$serviceStart | Out-File $configfile.settings.siglogerror -Append

# For each user generate HTML signature.

while($true) {

	try {
		$getUser = Get-ADUser -Searchbase $configfile.settings.searchbase -Properties * -Filter {Enabled -eq $true -and Mail -like '*'} | Where {$sigLog -notcontains $_.SamAccountName}
		$timeNow + " Signatures for " + $getUser.Count + " users to be created." | Out-File $configfile.settings.siglogerror -Append
		}
	catch {
		$timeNow + " Searchbase error. Please check configuration.xml and restart service`: $_" | Out-File $configfile.settings.siglogerror -Append
		$serviceStop | Out-File $configfile.settings.siglogerror -Append
		break
		}
		
	$getUser | foreach {
			
		# Set signature filename per user and pull in variables from getUser.
		$sigFilename = ($_.samaccountname)+".htm"
		
		# Create signature using function in temp dir then copy to output dir. Out-file does not play nicely wit UNC paths so is necessary.
		
		$sigtempFile = $configfile.settings.tempdir + "\" + $sigFilename
		$copyDir = $configfile.settings.outputdir + "\" + $sigFilename
		
		createSignature -template $configfile.settings.template -Name $_.Name -Title $_.title -StreetAddress $_.streetAddress -City $_.City -postalCode $_.postalCode -OfficePhone $_.OfficePhone -MobilePhone $_.mobilePhone -Company "Paperchase Products Ltd" -Sigpath $sigtempFile
		
		Copy-Item $sigtempFile $copyDir -Force
		Remove-Item $sigtempFile -Force
		
		# Log signature creation
		if ((Test-Path $copyDir) -eq $true) {
			($_.samaccountname) | Out-File $configfile.settings.siglog -Append
			}
		else {
			"Error creating`:" + ($_.samaccountname) | Out-File $configfile.settings.siglogerror -Append
			}
		
		}
	
	start-sleep -Seconds $configfile.settings.generationinterval
}