Powershell管道仅返回集合的最后一个成员

Powershell管道仅返回集合的最后一个成员,powershell,powershell-2.0,pipeline,Powershell,Powershell 2.0,Pipeline,我在管道中运行以下脚本时遇到问题: Get-Process | Get-MoreInfo.ps1 问题是只显示集合的最后一个进程。如何在以下脚本中处理集合的所有成员: param( [Parameter(Mandatory = $true,ValueFromPipeline = $true)] $Process ) function Get-Stats($Process) { New-Object PSObject -Property @{ Name = $Process.P

我在管道中运行以下脚本时遇到问题:

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)
试试这个:

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}
}

}
然后您可以使用:

. .\get-moreinfo.ps1 # 

Get-Process | Get-MoreInfo
评论后编辑:

试试这个:

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}
}

}
然后您可以使用:

. .\get-moreinfo.ps1 # 

Get-Process | Get-MoreInfo
评论后编辑:


如果您只需创建
Get MoreInfo
作为过滤器而不是函数,您将获得所需的效果

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

如果您只需创建
Get MoreInfo
作为过滤器而不是函数,您将获得所需的效果

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

事实上,克里斯蒂安的答案和特伯格斯泰特的答案都是正确的——它们本质上是等价的。您可以在我最近在Simple-Talk.com上的文章中了解更多关于如何以及为什么这样做的信息:

简言之,以下是要点:

  • 函数体包括开始过程结束
  • 未明确指定上述3个块中任何一个块的函数的操作就像所有代码都在结束块中一样;这就是你最初观察到的结果
  • 过滤器只是编写函数的另一种方式,不需要上述3个块中的任何一个,但所有代码都在进程块中。这就是为什么上述两个答案是等价的

  • 事实上,克里斯蒂安的答案和特伯格斯泰特的答案都是正确的——它们本质上是等价的。您可以在我最近在Simple-Talk.com上的文章中了解更多关于如何以及为什么这样做的信息:

    简言之,以下是要点:

  • 函数体包括开始过程结束
  • 未明确指定上述3个块中任何一个块的函数的操作就像所有代码都在结束块中一样;这就是你最初观察到的结果
  • 过滤器只是编写函数的另一种方式,不需要上述3个块中的任何一个,但所有代码都在进程块中。这就是为什么上述两个答案是等价的

  • 我想使用一个函数,但无法使其工作。您是否介意制作一个完整的示例,并扩展您所说的
    的含义?在实际的powershell contole中准备好函数
    ?我的答案中的代码有效-你复制粘贴了吗?什么不起作用?我已经在我的答案上添加了一个链接来阅读关于dot采购的内容。我想使用一个函数,但无法使其工作。您是否介意制作一个完整的示例,并扩展您所说的
    的含义?在实际的powershell contole中准备好函数
    ?我的答案中的代码有效-你复制粘贴了吗?什么不起作用?我已经在我的答案上添加了一个链接来阅读关于dot采购的内容。有关于过滤器的文档吗?我刚刚在一些网站上找到了关于_过滤器的信息,但在technet网站上没有。我不知道,在阅读Bruce Payette()的《Powershell in Action》时了解了该功能。这本书是我真正推荐的。有关于过滤器的文档吗?我刚刚在一些网站上找到了关于_过滤器的信息,但这在technet网站上不可用。我不知道,在阅读Bruce Payette()的《Powershell in Action》时了解到了这一功能,这是一本我真正推荐的书。