You can invoke Microsoft Outlook with command line switches to perform specific operations such as to compose an email and attach a file.
In Windows Subsystem for Linux, you can define a variable to store the location of the outlook executable and aliases or functions to call it. Functions seem to make it easier for me to quote values and are the only way to process command line arguments. Anything much more complicated than these examples likely belongs in a script rather than an alias or a function, and scripts let commands invoke commands where aliases and functions are for interactive sessions.
#hard-coded location of Outlook binary outlook="/mnt/c/Program Files/Microsoft Office/root/Office16/OUTLOOK.EXE" # Open or re-open Outlook # with gmail profile # $@ passing any additional command line arguments # & in the background function og() { "$outlook" /profile gmail /recycle $@ & }; # convert first argument to windows path and attach function oa() { file=`wslpath -w "$1"` ; shift ; "$outlook" -a "$file" $@ & }; # compose function om() { "$outlook" /c ipm.note $@ & }; # compose to email address specified as first argument function ot() { "$outlook" /c ipm.note /m "$@" & }; # attach first argument and compose to email to second argument function oat() { file=`wslpath -w "$1"` ; shift ; "$outlook" -a "$file" /m $@ & };
Remember invoke or type commands command names such as oat before defining aliases or functions in order to avoid unintentionally overriding existing features.

Define the functions at initialization:
With these functions, it is your responsibility to pass the correct arguments in the correct order.