2017-01-17 5 views
0

目標:PowerShellは、どのようにコマンドラインで複数の行を入力します

は、私は、私は複数行にすることができBase64でエンコードされた文字列を入力できるようになる解決策を見つけるにしようとしています。目標は文字列をデコードし、powershellコンソールで出力を返すことです。もともと、私はWinFormsダイアログを呼び出しましたが、これは暗黙的なリモート処理では不可能です。

は、これは私がこれまで持っているものです:

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

複数行を入力するときに、私は次のようなエラーメッセージが表示されます:

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 

あなたはそれが最初の部分をデコードしていることがわかります次の行で、コマンドレットとして読み取ります。

質問:

私は複数の行をデコードするために、衝突をフォーマット避けることができる方法は?

答えて

3

base64でエンコードされた文字列を複数行にすることはできません。独立したbase64でエンコードされた文字列になります。元のコンテンツの改行は、保存されずにコード化されます。

複数の独立したbase64でエンコードされた文字列を読み込もうとしている場合は、Read-Hostを1回呼び出すだけでそれを行うことはできません。 1行だけを読み込みます。

あなたがループに持っていて、(空白の入力など)を停止するためにいくつかの「信号」入力を取得するまでのラインを取っておこう:

do { 
    Write-Host 'Decode:' -ForegroundColor Yellow -NoNewline 
    $data = Read-Host 
    [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($data)) 
} while ($data) 
関連する問題