2017-10-06 66 views
0

爲什麼我不能將foreach-object操作的結果傳遞給另一個foreach-object操作?我無法獲得最後一個ForEach-Object循環運行。它什麼都不輸出。Powershell pipline foreach-object

$mailboxstatistics | 
Select-Object -First 20 | 
Where { $_.FolderPath.Contains("/Inkorg") -eq $True } | 
ForEach-Object -Begin{ 
     Write-Host "Begin" 
    } -Process{ 
     #Write-Host "Process" 
     Write-Host $($_.FolderPath) 
    } -End{ 
     Write-Host "End" 
    } | 
ForEach-Object{ 
    Write-Host "test" 
} 
+1

'Write-Host'不是'Write-Output'。你通常不會使用(明確),只是返回管道本身的值(這與Write-Output調用有相同的效果)。 –

+1

不要害怕打破你的陳述。請在第一個20的內容中設置一個變量,然後將此變量傳遞給第一個foreach,然後將其傳遞給下一個foreach。就你而言,我不明白爲什麼你不會在第一個foreach中執行所有需要的操作。 –

+0

似乎我在對象上使用Write-Host,($ _。FolderPath)是阻止循環傳遞對象的罪魁禍首。謝謝,不知道。有沒有一個適當的命令可以像debug.writeline()一樣工作,如果我想在傳遞管道時打印一個對象屬性值(不會阻塞它)? – Molotch

回答

0

編輯我原來的答覆:你問「爲什麼管道不讓你管從一個的ForEach到另一個的ForEach」,而不是一個實用的解決方案。這需要管道的基本定義。從

  • PowerShell:自動執行管理任務Michael Shepard; Chendrayan Venkatesan; Sherif Talaat;布倫頓J.W. Blawat 「在PowerShell中的管道是一種機制,從一個命令獲取數據到另一個。簡單地說,這是第一個命令輸出管道被視爲輸入下一個命令的數據。」

PowerShell中的管道傳遞.NET框架對象,而不是其他類型的可能傳遞文本的shell。所以,根據上面的定義,你期待For-EachObject輸出的結果是下一個序列的流水線輸入嗎?當你在做一個Where-Object或Select-Object時,你正在完善這個集合。您已經聲明對象已發送到寫主機。在ForEach完成後,管道中不會有任何內容作爲輸出。

我不確定流水線菊花鏈的優點。我可能是錯誤的,我通常用變量來分割序列。 ForEach會消耗和操作管道系統中的每一件產品,然後生產或者輸出管道系統中的下一個產品?我知道ForEach可以接受管道輸入作爲對象的集合,比如數組。所以我看到優勢,它的使用只能通過項目數迭代,而不是經典

for($i = 0; $i-lt $collectionOfOjbects.Length; $i++) 
{ 
    Verb-Noun $collectionOfObjects[$i] 
} 

是否可以嘗試選擇/第一整理提煉,然後通過管道,爲是foreach迭代?

$myFirst20MailboxStatsInkorg = $mailboxstatistics | Select-Object -First 20 | Where { $_.FolderPath.Contains("/Inkorg") -eq $True } 
#first round of iteration: 
$myFirst20MailboxStatsInkorg | ForEach-Object -Begin{ 
     Write-Host "Begin" 
    } -Process{ 
     #Write-Host "Process" 
     Write-Host $($_.FolderPath) 
    } -End{ 
     Write-Host "End" 
    } 
#second round of iteration 
$myFirst20MailboxStatsInkorg | ForEach-Object{ 
    Write-Host "test" 
} 
+0

當然是的,但這個問題通常更多的是關於爲什麼第一個foreach-object循環沒有把對象傳遞給管道。爲什麼Write-Host將整個對象轉移到主機而不僅僅是對象屬性的值。 – Molotch