Here is a simple way to add parameters to an existing command when you do not need nor want to overwrite the function name:
- Create a new function
- Add the new parameter(s) at the beginning of the parameter list
- use “ValueFromRemainingArguments” to collect the parameters you want to send to the original cmdlet; you can name the parameter as you want
- When calling the original cmdlet, use the splatting operator “@” with the parameter name you put last in the parameter list.
Here the example wraps the Send-MailMessage cmdlet in case the SMTP Server is not available, etc in a try/catch blog and whatever the result logs all parameters and the current timestamp into a CliXml file for future handling or retry.
Function Test-SendMailMessage
{
[CmdletBinding()]
Param
(
[parameter(mandatory=$true, position=0)][string]$LogFile,
[parameter(mandatory=$false, position=1, ValueFromRemainingArguments=$true)]$MyArgs
)
try
{
Write-Verbose "Trying to send a message"
Send-MailMessage @myargs
}
catch
{
Write-Verbose "Unable to send message"
}
Write-Verbose "Storing output in $LogFile"
Export-CliXml -Path $LogFile -InputObject $myArgs,(Get-Date)
}