Home > Software design >  Add aditional parameter attachment in Send-MailMessage function via hashtable
Add aditional parameter attachment in Send-MailMessage function via hashtable

Time:12-24

i have a working script with function SendMsg It send mail when is require. However require to modify it.

When everything is good - send only a message. When error - send a message with attachment

$recipients = "[email protected]","[email protected]"

function SendMsg() {
    param(
    [Parameter(mandatory=$False)][AllowEmptyString()][String]$Message
    [Parameter(mandatory=$False)][AllowEmptyString()][String]$Attachment
        
    )
   
    $mailParams = @{
        from       = "[email protected]"
        to         = $recipients.Split(';')
        subject    = "PWE script"
        smtpserver = "mailer.eva.com"
        
    }
    $Attach = $mailParams.Add("Attachments","c:\tmp\1.txt")
    
    
    Send-MailMessage @mailParams
}
__________________________________

#Error in the script bellow
SendMsg -Attachment $Attach -message "Error"

#As expect
SendMsg -message "All Good"

In this form attachment is added always. What do i need to change to reach the goal?

Spent a lot of time and stuck. I know how to do it with variables without hashtable, however wanna try not modified whole function because of it.

Any help would be appreciated!

CodePudding user response:

You don't need to change much, simply test if your parameter $Attachment has a value or not and only add it to the splatting Hashtable if there is some value given

Try

function SendMsg() {
    param(
        [Parameter(Mandatory = $true)]  # there must at least be one recipient
        [ValidateNotNullOrEmpty()]
        [string[]]$To,

        # the other parameters are optional and $null by default
        [String]$Message = $null,
        [String[]]$Attachment = $null  # [string[]] to allow for an array of attachments
    )

    $mailParams = @{
        from       = "[email protected]"
        to         = $To
        subject    = "PWE script"
        body       = $Message
        smtpserver = "mailer.eva.com"
    }
    # test if the Attachment array has values and only then add it to the Hashtable
    if ($Attachment.Count -gt 0) {
        $mailParams['Attachments'] = $Attachment
    }

    Send-MailMessage @mailParams
}


# send your email
SendMsg -To "[email protected]", "[email protected]" -Attachment "c:\tmp\1.txt" -Message "Should be fine"
  • Related