我在管道中运行以下脚本时遇到问题:
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)
答案 0 :(得分: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}
}
}
然后你可以使用:
. .\get-moreinfo.ps1 #
Get-Process | Get-MoreInfo
评论后编辑:
答案 1 :(得分:0)
我只是将Get-MoreInfo
创建为过滤器而非功能,您将获得所需的效果。
Filter Get-MoreInfo
{
param( [Parameter(Mandatory = $true,ValueFromPipeline = $true)]
$Process
)
...
答案 2 :(得分:0)
实际上,Christian的回答和tbergstedt的答案都都有效 - 而且它们本质上是等价的。您可以在我最近关于Simple-Talk.com的文章中了解有关如何以及为何的更多信息:Down the Rabbit Hole- A Study in PowerShell Pipelines, Functions, and Parameters。
简而言之,以下是重点: