Wie entkomme ich kaufmännische Und-Zeichen, Semikola und geschweifte Klammern in Befehlszeilen-Powershell-Parametern?

9

Ich verwende ein Powershell-Skript, um eine Konfigurationsdatei mit Datenbankpasswörtern und dergleichen zu erzeugen. Die normale Verwendung dieses Skripts besteht darin, ein Passwort zu erzeugen und zu verwenden, aber für einen flüchtigen Moment muss ich auf die Datenbank eines anderen Entwicklers zugreifen, also muss ich das Passwort in das Powershell-Skript eingeben.

Das Problem besteht darin, dass das Kennwort Kauderwelsch ist, der Und-Zeichen, Semikola und geschweifte Klammern enthält. Wie kann ich dies in einen Befehlszeilenaufruf von Powershell übergeben? ( Diese Antwort und diese andere Antwort sind hilfreich, hilft aber nicht mit den Semikolons und geschweiften Klammern.)

Folgendes habe ich versucht:

%Vor%

Ergebnis: Eine Fehlermeldung: Das kaufmännische Und (& amp;) Zeichen ist nicht erlaubt. Die & amp; Bediener ist für zukünftige Verwendung reserviert; wickle ein kaufmännisches Und-Zeichen im Doppel Anführungszeichen ("& amp;"), um es als Teil eines Strings zu übergeben.

%Vor%

Ergebnis: Wenn ein write-host von $ password ausgeführt wird, wird die Zeichenfolge nur bis zum Semikolon ausgegeben. Außerdem hat -otherparam seinen Standardwert und nicht den Wert, den ich an die Befehlszeile übergeben habe.

%Vor%

Ergebnis: write-host $ password druckt jetzt bis zum ersten Backtick vor dem Quote. Und ja, es gibt den Backtick aus, der zu zeigen scheint, dass alles falsch analysiert wird. Oh, und eine der anderen Funktionen, die im Skript aufgerufen wurden, hat eine Ausnahme ausgelöst, die ich vorher nicht gesehen habe (Ausnahme "AcquireToken" mit "4" Argument (en): "authentication_canceled: User canceled authentication"), was darauf hinweist, dass die param Das Parsing wurde komplett neu und faszinierend abgespritzt. Hier ist, was write-host $ password erzeugt:

%Vor%

Ergebnis: write-host $ password druckt jetzt bis zum ersten Backtick vor dem Quote. Und der zweite Parameter ist im Standardzustand. (d. h. das gleiche Ergebnis wie beim letzten Mal.) Auf der Plusseite ist die Ausnahme, die im vorherigen Beispiel ausgelöst wurde, nicht aufgetreten.

Wie kann ich also beliebige ASCII-Strings über die Windows-Befehlszeile an Powershell-String-Parameter übergeben? Oder wie entkomme ich Semikolons, kaufmännisches Und-Zeichen und geschweifte Klammern?

    
PotatoEngineer 21.03.2016, 22:25
quelle

1 Antwort

7
%Vor%

Hier

  • äußere " doppelte Anführungszeichen würden alle cmd giftigen Zeichen, z.B. < , & usw. mit Ausnahme von " selbst und % Prozentzeichen (und ! Ausrufezeichen, wenn verzögerte Erweiterung ist aktiviert) während
  • innere ' Apostrophe (einfache Anführungszeichen) würde alle powershell Einsen (außer ' Apostroph selbst) entkommen.

Aber Ausnahmen, die oben bemerkt wurden, könnten auch gemieden werden ... Basierend auf beiden Escape-Zeichen, Delimitern und Zitaten -Artikeln:

JosefZ 22.03.2016, 00:09
quelle

Tags und Links