2011-09-17 68 views
1

的最後一個成員我有一個管道運行以下腳本的問題:PowerShell的流水線只返回集合

Get-Process | Get-MoreInfo.ps1 

的問題是正在顯示只集合的最後一道工序。如何在下面的腳本集合的所有成員的工作:

param( [Parameter(Mandatory = $true,ValueFromPipeline = $true)] 
    $Process 
) 

function Get-Stats($Process) 
{ 

New-Object PSObject -Property @{ 
Name = $Process.Processname 

} 

} 
Get-Stats($Process) 

回答

1

試試這個:

param( [Parameter(Mandatory = $true,ValueFromPipeline = $true)] 
    $Process 
) 

process{ 
New-Object PSObject -Property @{ 
Name = $Process.Processname} 
} 

編輯:

如果你需要一個功能:

function Get-MoreInfo { 
param( [Parameter(Mandatory = $true,ValueFromPipeline = $true)] 
    $Process 
) 


process{ 
New-Object PSObject -Property @{ 
Name = $Process.Processname} 
} 

} 

那麼你可以使用:

評論後

編輯:

Read about dot sourcing a script

+0

我想使用一個函數,但我無法得到這個工作。您是否介意完成一個完整的示例,並且擴展「在實際的powershell contole中準備好的功能」的含義? – LamonteCristo

+0

我的答案中的代碼有效。 - 要複製並粘貼它嗎?什麼不行?我在我的答案中添加了一個鏈接,以閱讀有關點源的信息。 –

0

我只需創建Get-MoreInfo過濾而不是函數,你會得到預期的效果。

Filter Get-MoreInfo 
{ 
    param( [Parameter(Mandatory = $true,ValueFromPipeline = $true)] 
     $Process 
    ) 
... 
+0

是否有任何文件要過濾?我剛剛在某些網站上找到about_filters,但這在technet站點上不可用http://technet.microsoft.com/en-us/library/dd347616.aspx – Tom

+0

不知道,在閱讀_Powershell時瞭解了該功能在Action_ by Bruce Payette(http://www.manning.com/payette/) - 一本我真正推薦的書。 –

0

事實上,無論是基督教的回答和tbergstedt的回答是有效 - 他們基本上是相等的。你可以在我最近的Simple-Talk.com上的文章中瞭解更多關於如何和爲什麼:Down the Rabbit Hole- A Study in PowerShell Pipelines, Functions, and Parameters

概括地說,這裏有要點:

  1. 甲功能體包括開始過程,和塊。
  2. 未明確指定上述3個塊中的任何一個的功能如同所有代碼位於末端塊一樣操作;因此您最初觀察到的結果。
  3. A 過濾器只是寫入沒有上述3個塊中的任何一個的功能的另一種方式,但所有代碼都在過程塊中。這就是爲什麼上述兩個答案是等價的。