Frage

Ich habe einen Bereitstellungsskript (.bat), von denen einen Teil Aufruf andere Programme erfordert und ein Passwort auf der Kommandozeile zu senden. Ich log die Ausgabe des Bereitstellungsskript in einer Datei. Das Problem ist, dass das Passwort als auch protokolliert wird. Ich brauche einen Weg, um diese Protokolldatei von Hygienisierung.

Eine Möglichkeit, dies zu tun, ist nicht die Linie Echo, das das Passwort enthält, aber ich würde lieber nur das Passwort ersetzen durch eine andere Zeichenfolge.

Dies ist auf einem Server (Windows 2008) durchgeführt, so kann ich nicht nur Cygwin oder dergleichen installieren. Ich dachte, die ‚find‘ Windows-Befehl kann helfen, aber das Beste, es tun kann, ist die ganze Linie mit der ‚/ v‘ Option weglassen.

UPD: Haben einige der Forschung, und ich denke, Powershell ist der Weg zu gehen. Das Passwort ist in der Umgebungsvariable, so muss brauchen, um herauszufinden, wie es erhalten zu lesen und ersetzen.

War es hilfreich?

Lösung 2

durchlas ich die Möglichkeit, Powershell und nach über die Codierung erhalten, Zitate und ein paar andere Fragen, hier ist meine letzte Lösung:

powershell "& {(Get-Content $env:LOG_FILENAME)|Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'} | Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\")}"

Diese Zeile wird aus einer Batch-Datei mit dem Namen, als der letzte Schritt des Bereitstellungsskript. im Skript früher die Werte für log_filename und Passwort festgelegt werden.

Breaking it down:

Ausführen einer Powershell aus einer Batch-Datei:

powershell "& {...}"

Beim Lesen in der Protokolldatei:

(Get-Content $env:LOG_FILENAME)

Für jede Zeile ersetzen [regex] :: escape ($ env: password) mit '######':

Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'}

Escape alle Zeichen in dem Passwort-Umgebungsvariable, die als regex reserviert Zeichen interpretiert werden können:

[regex]::escape($env:PASSWORD)

Speichern Sie die Ausgabe in eine neue Protokolldatei mit einem .Clean [Zeitstempel] .log auf den ursprünglichen Namen angehängt.

Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\")

Andere Tipps

Wenn Sie JavaScript verwenden können, so etwas wie die folgenden sollte es tun:

var rePassword = /password=\S+/g;
while (!WScript.StdIn.AtEndOfStream)
{
  WScript.StdOut.WriteLine(WScript.StdIn.ReadLine().replace(rePassword, 'password=sanitized'));
}

Das wird die Standardeingabe, ersetzen lesen Sie alle Vorkommen der Zeichenfolge „password =“ gefolgt von einem beliebigen Anzahl von Nicht-Leerzeichen mit der Zeichenfolge „password = hygienisiert und die Ergebnisse auf der Standardausgabe schreiben. Sie können den rePassword regulären Ausdruck optimieren und den Ersatz-String an Ihren Anforderungen anpassen. Vorausgesetzt, dass Sie das Skript als „sanitize.js“ gespeichert, können Sie es aus einer Batch-Skript ausführen wie folgt:

cscript sanitize.js < logfile.log > logfile.sanitized
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top