2017-01-17 1 views
0

Tor zum eingeben:Powershell, wie mehrere Linien auf der Kommandozeile

ich eine bin versucht, eine Lösung zu finden, die mir erlauben würde eine Base64-codierte Zeichenfolge eingeben, die mehrere Zeilen sein kann. Das Ziel besteht darin, die Zeichenfolge zu dekodieren und die Ausgabe in der Powershell-Konsole zurückzugeben. Ursprünglich habe ich einen WinForms-Dialog aufgerufen, dies ist jedoch mit implizitem Remoting nicht möglich.

Dies ist, was ich bisher:

function Get-Base64 { 
    Write-Host 'Decode:' -ForegroundColor Yellow -NoNewline 
    $data = Read-Host 
    $decode = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("$data")) 
    $decode.ToString() 
     } 

bekomme ich folgende Fehlermeldung, wenn mehrere Zeilen eingeben:

PS > Get-Base64 
Decode)ZXZhbChmdW5jdGlvbihwLGEsYyxrLGUsZCl7ZT1mdW5jdGlvbihjKXtyZXR1cm4oYzxhPycnOmUo 
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(
PS > cGFyc2VJbnQoYy9hKSkpKygoYz1jJWEpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYysyOSk6Yy50 
cGFyc2VJbnQoYy9hKSkpKygoYz1jJWEpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYysyOSk6Yy50 : The term 'cGFyc2VJbnQoYy9hKSkpKygoYz1jJWEpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYysyOSk6Yy50' is not recognized as the name of a cmdlet, function, script file, 
or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. 
At line:1 char:1 
+ cGFyc2VJbnQoYy9hKSkpKygoYz1jJWEpPjM1P1N0cmluZy5mcm9tQ2hhckNvZGUoYysyO ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (cGFyc2VJbnQoYy9...GUoYysyOSk6Yy50:String) [], CommandNotFoundException 
    + FullyQualifiedErrorId : CommandNotFoundException 

Sie können sehen, dass es den ersten Teil decodiert dann in der nächsten Zeile, lesen Sie es als Cmdlet.

Frage:

Wie kann ich Kollisionen vermeiden Formatierung mehrere Zeilen zu entschlüsseln?

Antwort

3

Eine base64-codierte Zeichenfolge kann nicht mehrere Zeilen umfassen. Diese wären separate, unabhängige base64-codierte Strings. Neue Zeilen im ursprünglichen Inhalt würden codiert, nicht beibehalten.

Wenn Sie beabsichtigen, mehrere unabhängige base64-codierte Strings zu lesen, können Sie dies nicht mit einem einzigen Aufruf von Read-Host tun. Es liest nur eine Zeile.

Sie werden in einer Schleife haben und nehmen Linien zu halten, bis Sie einige „Signal“ Eingang bekommen (wie eine leere Eingabe) zu stoppen:

do { 
    Write-Host 'Decode:' -ForegroundColor Yellow -NoNewline 
    $data = Read-Host 
    [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($data)) 
} while ($data) 
Verwandte Themen