写主机字符串并与输入相同以进一步执行

时间:2017-03-03 04:43:07

标签: powershell

尝试通过将回显的字符串作为输入来回显字符串并使用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

对此有任何想法

2 个答案:

答案 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的倍数的字符串。(我想这只是一个不太好的示例)