Passing Boolean Parameters To Pwsh from Bash
This is definitely one of those things that I had to write down after I figured out how to do it because there was no help online about it. Also, it's a bit esoteric I guess 😺
Here's my issue - I was writing a Bash script that needed to run a Powershell (i.e. pwsh
) script on Linux. This pwsh script had a required boolean parameter. So here's what I tried first:
# remember, this is bash :-) pwsh ./path/to/script.ps1 -IsAThing "$True" pwsh ./path/to/script.ps1 -IsAThing $True pwsh ./path/to/script.ps1 -IsAThing 0 pwsh ./path/to/script.ps1 -IsAThing '`$True' pwsh ./path/to/script.ps1 -IsAThing '\$True' pwsh ./path/to/script.ps1 -IsAThing "\$True" pwsh ./path/to/script.ps1 -IsAThing \$True
But that kept giving me the following error:
Cannot process argument transformation on parameter 'IsAThing'. Cannot convert value "System.String" to type "System.Boolean". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.
I then tried add -File
to the command like this:
pwsh -File ./path/to/script.ps1 -IsAThing '$True'
But alas, that also didn't work. Thankfully I really try to surround myself with smart friends, and one of them suggested that I try replacing -File
with -Command
. And what do you know, these all worked:
# Working bash + pwsh!!! pwsh -Command ./path/to/script.ps1 -IsAThing 0 pwsh -Command ./path/to/script.ps1 -IsAThing 1 pwsh -Command ./path/to/script.ps1 -IsAThing '$True' pwsh -Command ./path/to/script.ps1 -IsAThing '$False'
Huzzah! I have no idea why this change made the necessary difference, but I sure am glad it did.