2014-04-01 45 views
0

有什麼方法可以在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 $_ } 

...但爲什麼不$(...)行爲相同的方式?

回答

0

$()在傳遞它的輸出之前執行它內部的每個語句。您可以使用ScriptBlocks {}來輸出流。

要調用當前範圍內的ScriptBlock,請使用點運算符。

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

要調用它在兒童範圍,使用&電話運營商。

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

您可以將一個scriptblock分配給一個變量來傳遞它。

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 

要了解更多關於ScriptBlocks,請about_Script_Blocks