functions/Get-DbaAgentOperator.ps1

FUNCTION Get-DbaAgentOperator {
    <#
    .SYNOPSIS
    Returns all SQL Agent operators on a SQL Server Agent.
 
    .DESCRIPTION
    This function returns SQL Agent operators.
 
    .PARAMETER SqlInstance
    SQLServer name or SMO object representing the SQL Server to connect to.
    This can be a collection and receive pipeline input.
 
    .PARAMETER SqlCredential
    PSCredential object to connect as. If not specified, currend Windows login will be used.
 
    .PARAMETER Silent
    Use this switch to disable any kind of verbose messages
 
    .NOTES
    Author: Klaas Vandenberghe ( @PowerDBAKlaas )
    Tags: Agent, SMO
    Website: https://dbatools.io
    Copyright: (C) Chrissy LeMaire, clemaire@gmail.com
    License: GNU GPL v3 https://opensource.org/licenses/GPL-3.0
 
    .LINK
    https://dbatools.io/Get-DbaAgentOperator
 
    .EXAMPLE
    Get-DbaAgentOperator -SqlInstance ServerA,ServerB\instanceB
    Returns any SQL Agent operators on serverA and serverB\instanceB
 
    .EXAMPLE
    'serverA','serverB\instanceB' | Get-DbaAgentOperator
    Returns all SQL Agent operators on serverA and serverB\instanceB
 
    #>

    
    [CmdletBinding()]
    Param (
        [parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $True)]
        [Alias("ServerInstance", "SqlServer")]
        [object[]]$SqlInstance,
        [PSCredential][System.Management.Automation.CredentialAttribute()]
        $SqlCredential,
        [switch]$Silent
    )
    process {
        foreach ($instance in $SqlInstance) {
            try {
                Write-Message -Level Verbose -Message "Connecting to $instance"
                $server = Connect-SqlServer -SqlServer $instance -SqlCredential $sqlcredential
            }
            catch {
                Stop-Function -Message "Failed to connect to $instance : $($_.Exception.Message)" -Continue -Target $instance -InnerErrorRecord $_
            }
            
            Write-Message -Level Verbose -Message "Getting Edition from $server"
            Write-Message -Level Verbose -Message "$server is a $($server.Edition)"
            
            if ($server.Edition -like 'Express*') {
                Stop-Function -Message "There is no SQL Agent on $server, it's a $($server.Edition)" -Continue -Target $server
            }
            
            $defaults = "ComputerName", "SqlInstance", "InstanceName", "Name", "ID", "Enabled as IsEnabled", "EmailAddress", "LastEmail"
            $operators = $server.Jobserver.operators
            
            foreach ($operator in $operators) {
                
                $jobs = $server.JobServer.jobs | Where-Object { $_.OperatorToEmail, $_.OperatorToNetSend, $_.OperatorToPage -contains $operator.Name }
                $lastemail = [dbadatetime]$operator.LastEmailDate
                
                Add-Member -InputObject $operator -MemberType NoteProperty -Name ComputerName -Value $server.NetName
                Add-Member -InputObject $operator -MemberType NoteProperty -Name InstanceName -Value $server.ServiceName
                Add-Member -InputObject $operator -MemberType NoteProperty -Name SqlInstance -Value $server.DomainInstanceName
                Add-Member -InputObject $operator -MemberType NoteProperty -Name RelatedJobs -Value $jobs
                Add-Member -InputObject $operator -MemberType NoteProperty -Name LastEmail -Value $lastemail
                Select-DefaultView -InputObject $operator -Property $defaults
            }
        }
    }
}