2012-04-24 3 views
7

Powershell scheint leere Zeichenfolgenargumente zu löschen, wenn sie an einen Befehl übergeben werden. Ich habe diesen CodeÜbergabe leerer Argumente an ausführbare Dateien mit 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 

Sie können davon ausgehen, dass $ b ein 'Name' Mitglied hat. Wie kann ich dies als ein Argument an die exe übergeben, auch wenn der Wert eine leere Zeichenfolge ist. Ich habe versucht, den Anrufoperator ohne Erfolg zu verwenden.

Antwort

7

Wenn Sie eine leere Zeichenfolge wollen versuchen erscheinen entkommen Anführungszeichen um das Argument wie folgt:

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

Bitte beachte, dass ich dies auf V3 getestet also bin ich nicht sicher, ob das Verhalten auf V2 genau gleich ist.

5

Versuchen Sie, eine leere Anführungszeichenfolge in Anführungszeichen zu übergeben, oder umgekehrt.

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

oder

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

Ich testete beide Methoden in PS v5 und der erste hat nicht funktioniert, aber der zweite hat: './echoargs $ b.name, '" "''. Das Komma zwischen den Parametern schien in meinem Fall nicht notwendig zu sein. – hjoelr

Verwandte Themen