Powershell如何在命令行中输入多行

时间:2017-01-17 16:52:18

标签: 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

您可以看到它解码了第一部分然后在下一行,将其作为cmdlet读取。

问题:

如何避免格式化冲突以解码多行?

1 个答案:

答案 0 :(得分:3)

base64编码的字符串不能在多行上;那些将是独立的,独立的base64编码字符串。原始内容中的换行符将被编码,而不是保留。

如果您打算读取多个独立的base64编码字符串,则只需调用Read-Host即可完成此操作。它只读一行。

你必须循环并继续占线,直到你得到一些“信号”输入停止(如空白输入):

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