目标:
我试图找到一个解决方案,允许我输入一个可以是多行的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读取。
问题:
如何避免格式化冲突以解码多行?
答案 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)