functions/Get-DbaTrigger.ps1

function Get-DbaTrigger {
    <#
.SYNOPSIS
Get all existing triggers on one or more SQL instances.
 
.DESCRIPTION
Get all existing triggers on one or more SQL instances.
 
Default output includes columns ComputerName, SqlInstance, Database, TriggerName, IsEnabled and DateLastModified.
 
.PARAMETER SqlInstance
The SQL Instance that you're connecting to.
 
.PARAMETER SqlCredential
SqlCredential object used to connect to the SQL Server as a different user.
     
.PARAMETER Database
The database(s) to process - this list is auto-populated from the server. If unspecified, all databases will be processed.
 
.PARAMETER ExcludeDatabase
The database(s) to exclude - this list is auto-populated from the server
 
.NOTES
Tags: Database, Triggers
Author: Klaas Vandenberghe ( @PowerDBAKlaas )
 
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-DbaTrigger
 
.EXAMPLE
Get-DbaTrigger -SqlInstance ComputerA\sql987
 
Returns a custom object displaying ComputerName, SqlInstance, Database, TriggerName, IsEnabled and DateLastModified.
 
.EXAMPLE
Get-DbaTrigger -SqlInstance 'ComputerA\sql987','ComputerB'
 
Returns a custom object displaying ComputerName, SqlInstance, Database, TriggerName, IsEnabled and DateLastModified from two instances.
 
.EXAMPLE
Get-DbaTrigger -SqlInstance ComputerA\sql987 | Out-Gridview
 
Returns a gridview displaying ComputerName, SqlInstance, Database, TriggerName, IsEnabled and DateLastModified.
 
.EXAMPLE
'ComputerA\sql987','ComputerB' | Get-DbaTrigger | Out-Gridview
 
Returns a custom object displaying ComputerName, SqlInstance, Database, TriggerName, IsEnabled and DateLastModified from two instances.
 
#>

    [CmdletBinding()]
    param (
        [parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [Alias("ServerInstance", "SqlServer", "instance")]
        [DbaInstanceParameter[]]$SqlInstance,
        [Alias("Credential")]
        [PSCredential]
        $SqlCredential,
        [Alias("Databases")]
        [object[]]$Database,
        [object[]]$ExcludeDatabase
    )
    
    process {
        foreach ($Instance in $SqlInstance) {
            Write-Verbose "Connecting to $Instance"
            try {
                $server = Connect-SqlInstance -SqlInstance $Instance -SqlCredential $SqlCredential -Erroraction SilentlyContinue
            }
            catch {
                Write-Warning "Can't connect to $Instance"
                continue
            }
            
            Write-Verbose "Getting Server Level Triggers on $Instance"
            $server.Triggers |
                ForEach-Object {
                [PSCustomObject]@{
                    ComputerName     = $server.NetName
                    InstanceName     = $server.ServiceName
                    SqlInstance      = $server.DomainInstanceName
                    TriggerLevel     = "Server"
                    Database         = $null
                    TriggerName      = $_.Name
                    Status           = switch ($_.IsEnabled) { $true { "Enabled" } $false { "Disabled" } }
                    DateLastModified = $_.DateLastModified
                }
            }
            
            Write-Verbose "Getting Database Level Triggers on $Instance"
            $dbs = $server.Databases | Where-Object { $_.status -eq 'Normal' }
            
            if ($Database) {
                $dbs = $dbs | Where-Object Name -in $Database
            }
            if ($ExcludeDatabase) {
                $dbs = $dbs | Where-Object Name -notin $ExcludeDatabase
            }
            
            $dbs |
                ForEach-Object {
                $DatabaseName = $_.Name
                Write-Verbose "Getting Database Level Triggers on Database $DatabaseName on $Instance"
                $_.Triggers |
                    ForEach-Object {
                    [PSCustomObject]@{
                        ComputerName     = $server.NetName
                        InstanceName     = $server.ServiceName
                        SqlInstance      = $server.DomainInstanceName
                        TriggerLevel     = "Database"
                        Database         = $DatabaseName
                        TriggerName      = $_.Name
                        Status           = switch ($_.IsEnabled) { $true { "Enabled" } $false { "Disabled" } }
                        DateLastModified = $_.DateLastModified
                    }
                }
            }
        }
    }
}