2012-04-24 15 views
7

Powershell parece eliminar los argumentos de cadenas vacías cuando se pasan a un comando. Tengo este códigoPasando argumentos vacíos a los ejecutables usando powershell

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 

Puede suponer que $ b tiene un miembro 'name'. ¿Cómo puedo pasar esto como un argumento para el exe incluso cuando el valor es una cadena vacía? Intenté usar el operador de llamadas sin éxito.

Respuesta

7

Si desea que aparezca una cadena vacía intento escaparon comillas alrededor del argumento de esta manera:

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" "" 

Tenga en cuenta que he probado esto en V3, así que estoy no estoy seguro si el comportamiento será exactamente el mismo en V2.

5

Intente pasar una cadena de comilla simple vacía entre comillas dobles, o viceversa.

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

o

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

Probé ambos métodos en PS v5 y el primero no funcionó, pero el segundo sí: './echoargs $ b.name, '" "''. La coma entre los parámetros no parecía ser necesaria en mi caso. – hjoelr

Cuestiones relacionadas