"Real" PowerShell中流式传输?



有没有办法在PowerShell中实现真正的流媒体?

以下语句说明了我想要的内容:

$(Write-Output "one"; Start-Sleep -Seconds 3; Write-Output "two")

我期望的是:

one
<three seconds delay>
two

实际发生的是这样的:

<three seconds delay>
one
two

因此,PowerShell所谓的"流"实际上只是列表,但是有没有一些简单的方法可以在PowerShell中传递真正的流?

加法:

刚刚发现这符合我的需求:

function test {
    Write-Output "one";
    Start-Sleep -Seconds 3;
    Write-Output "two";
}
test | % { Write-Host $_ }

。但是为什么$( ... )的行为方式不一样呢?

$()在传递输出之前执行其中的每个语句。您可以使用脚本块{}来流式传输输出。

若要在当前作用域中调用脚本块,请使用点运算符。

. {Write-Output "one"; Start-Sleep -Seconds 3; Write-Output "two"}

若要在子作用域中调用它,请使用 & 调用运算符。

& {Write-Output "one"; Start-Sleep -Seconds 3; Write-Output "two"}

您可以将脚本块分配给变量以传递它。

function Show-ExecutingScript ($ScriptBlock) {
    Write-Host "Executing ScriptBlock: `n$ScriptBlock" -Fore Yellow
    & $ScriptBlock
}
$MyCommands = {Write-Output "one"; Start-Sleep -Seconds 3; Write-Output "two"}
Show-ExecutingScript $MyCommands

要了解有关 ScriptBlock 的更多信息,请查看about_Script_Blocks

相关内容

  • 没有找到相关文章

最新更新