尝试通过将回显的字符串作为输入来回显字符串并使用base64进行编码。
Write-Host "Hello World" | $b = [System.Convert]::FromBase64String($_) ; [System.Text.Encoding]::UTF8.GetString($b)
但是低于错误,
At line:1 char:28
+ Write-Host "Hello World" | $b = [System.Convert]::FromBase64String($_) ; [System ...
+ ~~
Expressions are only allowed as the first element of a pipeline.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
对此有任何想法
答案 0 :(得分:1)
这意味着您尝试管道的功能不接受管道。
您需要使用变量传递到函数中 例如
// convert string to base64
$a = "Hello World"
$b = [System.Text.Encoding]::UTF8.GetBytes($a)
$c = [System.Convert]::ToBase64String($b)
Write-Host $c
答案 1 :(得分:0)
您可以使用Write-output
并将其传递给New-Variable
Write-output "test" | New-Variable -Name b
$b = [System.Convert]::FromBase64String($b)
[System.Text.Encoding]::UTF8.GetString($b)
你也可以创建这个函数:
function Verb-Noun{
Param( [Parameter(Mandatory=$true,ValueFromPipeline=$true,Position=0)][string]$string )
[System.Text.Encoding]::UTF8.GetString( ( [System.Convert]::FromBase64String($string) ) )
}
Write-Output "test" | Verb-Noun
请注意,您必须使用Write-output
来管道字符串。 Write-Host
在这里不起作用。
此外,您的字符串“Hello world”无法使用此方法转换,因为[System.Convert]::FromBase64String($string)
仅适用于长度为4的倍数的字符串。(我想这只是一个不太好的示例)