functions/SetJobOperator.ps1

Function Set-JobOperator {
    <#
.Synopsis
Create or modify SQL Agent Job Operator.
.Description
SQL Agent Job Operator will be created or updated to match the settings in the xml file.
.Parameter sqlServer
The SQL Connection that SQL Agent Job Opertor is on/will be created on.
.Parameter root
The XML Object
.Example
$JobManifestXmlFile = "C:\Reports\Our_First_Job.xml"
[xml] $_xml = [xml] (Get-Content -Path $JobManifestXmlFile)
$x = Get-Xml -XmlFile $_xml
Set-JobOperator -SqlServer $SqlConnection -root $x
#>

    [CmdletBinding()]
    param
    (
        [Microsoft.SqlServer.Management.Smo.SqlSmoObject]
        [ValidateNotNullorEmpty()]
        $SqlServer,
        [System.Xml.XmlLinkedNode]
        [ValidateNotNullorEmpty()]
        $root
    )
    $JobOperatorName = $root.Operator.Name
    if ($JobOperatorName.Length -eq 0)
    {
        Write-Verbose "No Operator Info in XML"
        Return
    }
    $JobOperatorEMail = $root.Operator.EMail
    $JobOperatorPage = $root.Operator.Page
    $JobOperatorNetSend = $root.Operator.NetSend
    $ServerJobOperators = $SqlServer.JobServer.Operators | Select-Object -ExpandProperty Name
    if ($ServerJobOperators -notcontains $JobOperatorName) {
        $op = New-Object ('Microsoft.SqlServer.Management.Smo.Agent.Operator') ($SqlServer.JobServer, $JobOperatorName)
        if (![String]::IsNullOrEmpty($JobOperatorEmail)) {
            $op.EmailAddress = $JobOperatorEmail
        }
        if (![String]::IsNullOrEmpty($JobOperatorPage)) {
            $op.PagerAddress = $JobOperatorPage
        }
        if (![String]::IsNullOrEmpty($JobOperatorNetSend)) {
            $op.NetSendAddress = $JobOperatorNetSend
        }
        try {
            $op.Create()
            Write-Verbose "Job Operator $op created."
        }
        catch {
            throw $_.Exception
        }
        finally {
            Remove-Variable -Name "op"    
        }
    }

    else {
        try {
            $op = $SqlServer.JobServer.Operators[$JobOperatorName]
            $op.EmailAddress = $JobOperatorEmail
            $op.Alter()
            Write-Verbose "Job Operator Email Address Updated."
        }
        catch {
            throw $_.Exception
        }
        finally {
            Remove-Variable -Name "op"    
        }
    }
}