Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing empty arguments to executables using powershell

Powershell seems to drop empty string arguments when passed to a command. I have this code

PS D:\> $b.name = "foo bar"
PS D:\> ./echoargs $b.name
Arg 0 is D:\echoargs.exe
Arg 1 is foo bar
PS D:\> $b.name = ""
PS D:\> ./echoargs $b.name
Arg 0 is D:\echoargs.exe

You can assume that $b has a 'name' member. How can i pass this as an argument to the exe even when the value is an empty string. I've tried using the call operator with no success.

like image 371
user1353535 Avatar asked Apr 24 '12 11:04

user1353535


People also ask

How do you pass arguments to a PowerShell script?

Passing arguments in PowerShell is the same as in any other shell: you just type the command name, and then each argument, separated by spaces. If you need to specify the parameter name, you prefix it with a dash like -Name and then after a space (or a colon), the value.

How do I use splat in PowerShell?

Splatting command parameters This feature is introduced in Windows PowerShell 3.0. To splat the parameters of a command, use @Args to represent the command parameters. This technique is easier than enumerating command parameters and it works without revision even if the parameters of the called command change.


3 Answers

If you want an empty string to appear try escaped quotes around the argument like so:

PS> $b = [psobject]@{name = ''}
PS> echoargs `"$($b.Name)`"
Arg 0 is <>

Command line:
"C:\Users\Keith\Pscx\Trunk\Src\Pscx\bin\Release\Apps\EchoArgs.exe"  ""

Note that I tested this on V3 so I'm not sure if the behavior will be exactly the same on V2.

like image 84
Keith Hill Avatar answered Oct 29 '22 08:10

Keith Hill


Try to pass an empty single quote string enclosed in double quotes, or vice versa.

./echoargs $b.name, "''"

or

./echoargs $b.name, '""'
like image 36
Shay Levy Avatar answered Oct 29 '22 09:10

Shay Levy


This should also work:

./echoargs [String]::Empty
like image 3
Sebastian Krysmanski Avatar answered Oct 29 '22 09:10

Sebastian Krysmanski