2017-03-01 4 views
0

Ich versuche, gpg2 von einem Powershell-Skript aufzurufen. Ich muss Parameter mit eingebetteten Anführungszeichen übergeben, aber ich bekomme ein sehr seltsames Verhalten, wenn ich mir die Ergebnisse von Echoargs oder der ausführbaren Datei direkt ansehe.Powershell: gpg Befehlsparameter mit eingebetteten doppelten Anführungszeichen

$Passphrase = "PassphraseWith!$#" #don't worry, real passphrase not hardcoded! 
$Filename = "\\UNC\path\with\a space\mydoc.pdf.pgp" 
$EncyptedFile = $Filename -replace "\\", "/" 
$DecryptedFile = $EncyptedFile -replace ".pgp" , "" 

$args = "--batch", "--yes", "--passphrase `"`"$PGPPassphrase`"`"", "-o `"`"$DecryptedFile`"`"", "-d `"`"$EncyptedFile`"`"" 
& echoargs $args 
& gpg2 $args 

gpg erfordert mich doppelte Anführungszeichen für das Passwort zu verwenden, weil es Symbole und für die Wege wegen eines Raumes (bestätigte dies funktioniert, wenn ich eine Probe einzigen Befehl direkt von Eingabeaufforderung). Außerdem möchte GPG UNC-Pfade mit Schrägstrichen (bestätigt, das funktioniert auch).

Wie Sie sehen können, versuche ich, die Passphrase und Dateipfade mit gepaarten doppelten Doppelzitaten zu umbrechen, da Echoargs darauf hinweist, dass die äußeren Anführungszeichen entfernt werden. Hier ist das, was ich von EchoArgs:

Arg 0 is <--batch> 
Arg 1 is <--yes> 
Arg 2 is <--passphrase "PassphraseWith!$#"> 
Arg 3 is <-o "//UNC/path/with/a space/mydoc.pdf"> 
Arg 4 is <-d "//UNC/path/with/a space/mydoc.pdf.pgp"> 

Command line: 
"C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\PSCX\Apps\EchoArgs.exe" --batch --yes "--pass 
phrase ""PassphraseWith!$#""" "-o ""//UNC/path/with/a space/mydoc.pdf""" "-d ""//UNC/path/with/a space/mydo 
c.pdf.pgp""" 

jedoch gpg2 ergibt folgendes Ergebnis (ob Lauf von ISE oder PS direkt):

gpg2.exe : gpg: invalid option "--passphrase "PassphraseWith!$#""

Wenn ich versuche & gpg2 "$args" das Array zu konvertieren ein String dann bekomme ich folgende ähnliches Ergebnis:

gpg2.exe : gpg: invalid option "--batch --yes --passphrase "PassphraseWith!$#"

Irgendwelche Ideen auf diesem?

+0

Das wird eine lächerliche Antwort sein, aber wenn man tatsächlich ein Geld-Zeichen in Ihrem Passwort hat, haben Sie einfache Anführungszeichen benutzen ... – Cole9350

+0

@ Cole9350 bekomme ich das gleiche Ergebnis auch dann, wenn Ich nehme die Symbole aus dem pw heraus, aber, gut gewählt, in der ursprünglichen Deklaration in Zeile 1 würde ein $, gefolgt von einem alphanumerischen, einfache Anführungszeichen erfordern. – cmcapellan

+0

'$ {Nicht $ args, weil $ args automatische Variable ist} =" --batch "," --yes "," --passphrase "," '" $ PGPPassphrase' "", "-o", "' "$ DecryptedFile'" "," -d "," '" $ EncyptedFile "" "; echoargs '$ {Keine Argumente, weil $ args eine automatische Variable ist}' ' – PetSerAl

Antwort

0

@ PetSerAl Lösung: Sie müssen die Flag/Parameter und seinen Wert, tokenize so in zwei Elemente im Array aufzuschlüsseln:

"--passphrase", "`"$Passphrase`"" 

nicht so kombiniert:

"--passphrase `"`"$Passphrase`"`"" 

Beachten Sie, dass reguläre Powershell-Zitate, die Backticks verwenden, funktionieren hier gut. Voll Beispiel unten:

$Passphrase = "PassphraseWith!$#" #don't worry, real passphrase not hardcoded! 
$Filename = "\\UNC\path\with\a space\mydoc.pdf.pgp" 
$EncyptedFile = $Filename -replace "\\", "/" 
$DecryptedFile = $EncyptedFile -replace ".pgp" , "" 

$params = "--batch", "--quiet", "--yes", "--passphrase", "`"$Passphrase`"", "-o", "`"$DecryptedFile`"", "-d", "`"$EncyptedFile`"" 
& echoargs $params 
& gpg2 $params 
+0

@PetSerAl Sie sind richtig, danke für das Aufzeigen. Fest! – cmcapellan

Verwandte Themen