Public/Basic/New-BurntToastNotification.ps1

function New-BurntToastNotification
{
    <#
        .SYNOPSIS
        Creates and displays a Toast Notification.
         
        .DESCRIPTION
        The New-BurntToastNotification cmdlet creates and displays a Toast Notification on Microsoft Windows 10.
 
        You can specify the text and/or image displayed as well as selecting the sound that is played when the Toast Notification is displayed.
 
        You can optionally call the New-BurntToastNotification cmdlet with the Toast alias.
         
        .INPUTS
        System.String
 
        You cannot pipe input to this cmdlet.
 
        .OUTPUTS
        None
 
        New-BurntToastNotification displays the Toast Notification that is created.
         
        .NOTES
 
        The New-BurntToastNotification function is classified as: Basic
         
        .EXAMPLE
        New-BurntToastNotification
         
        This command creates and displays a Toast Notification with all default values.
         
        .EXAMPLE
        New-BurntToastNotification -Text 'Example Script', 'The example script has run successfully.'
         
        This command creates and displays a Toast Notification with customized title and display text.
 
        .EXAMPLE
        New-BurntToastNotification -Text 'WAKE UP!' -Sound 'Alarm2'
 
        This command creates and displays a Toast Notification which plays a looping alarm sound and lasts longer than a default Toast.
         
        .LINK
        https://github.com/Windos/BurntToast/blob/master/Help/New-BurntToastNotification.md
    #>


    [alias('Toast')]
    [CmdletBinding(DefaultParameterSetName = 'Sound')]
    param
    (
        [Parameter()]
        [ValidateCount(0,3)]
        [String[]] $Text = 'Default Notification',

        [Parameter()]
        #[ValidateScript({ Test-ToastImage -Path $_ })]
        [String] $AppLogo,

        [Parameter()]
        #[ValidateScript({ Test-ToastAppId -Id $_ })]
        [String] $AppId = $Script:Config.AppId,

        [Parameter(ParameterSetName = 'Sound')]
        [ValidateSet('Default',
                     'IM',
                     'Mail',
                     'Reminder',
                     'SMS',
                     'Alarm',
                     'Alarm2',
                     'Alarm3',
                     'Alarm4',
                     'Alarm5',
                     'Alarm6',
                     'Alarm7',
                     'Alarm8',
                     'Alarm9',
                     'Alarm10',
                     'Call',
                     'Call2',
                     'Call3',
                     'Call4',
                     'Call5',
                     'Call6',
                     'Call7',
                     'Call8',
                     'Call9',
                     'Call10')]
        [String] $Sound = 'Default',

        [Parameter(Mandatory = $true,
                   ParameterSetName = 'Silent')]
        [Switch] $Silent,

        [Parameter()]
        [Switch] $SnoozeAndDismiss
    )
    
    $TextObjects = @()

    foreach ($Txt in $Text)
    {
        $TextObjects += New-BTText -Text $Txt
    }

    if ($AppLogo)
    {
        $AppLogoImage = New-BTImage -Source $AppLogo -AppLogoOverride -Crop Circle
    }
    else
    {
        $AppLogoImage = New-BTImage -AppLogoOverride -Crop Circle
    }

    if ($Silent)
    {
        $Audio = New-BTAudio -Silent
    }
    else
    {
        if ($Sound -ne 'Default')
        {     
            if ($Sound -like 'Alarm*' -or $Sound -like 'Call*')
            {
                $Audio = New-BTAudio -Source "ms-winsoundevent:Notification.Looping.$Sound" -Loop
                $Long = $True
            }
            else
            {
                $Audio = New-BTAudio -Source "ms-winsoundevent:Notification.$Sound" -Loop
            }
        }
    }

    $Binding = New-BTBinding -Children $TextObjects -AppLogoOverride $AppLogoImage
    $Visual = New-BTVisual -BindingGeneric $Binding

    if ($SnoozeAndDismiss)
    {
        $SnoozeAction = New-BTAction -SnoozeAndDismiss

        if ($Long)
        {
            $Content = New-BTContent -Audio $Audio -Visual $Visual -Actions $SnoozeAction -Duration Long
        }
        else
        {
            $Content = New-BTContent -Audio $Audio -Visual $Visual -Actions $SnoozeAction
        }
    }
    else
    {
        if ($Long)
        {
            $Content = New-BTContent -Audio $Audio -Visual $Visual -Duration Long
        }
        else
        {
            $Content = New-BTContent -Audio $Audio -Visual $Visual
        }
    }

    Submit-BTNotification -Content $Content -AppId $AppId
}