Конвейерная обработка Powershell возвращает только последний элемент коллекции - PullRequest
1 голос
/ 17 сентября 2011

У меня проблема с запуском следующего сценария в конвейере:

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)

Ответы [ 3 ]

1 голос
/ 17 сентября 2011

попробуйте это:

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

Редактировать после комментария:

Читать о точечном поиске сценария

0 голосов
/ 18 сентября 2011

На самом деле, и ответ Кристиана, и ответ Тбергштедта оба действительны - и они по сути эквивалентны.Вы можете узнать больше о том, как и почему, в моей недавней статье на Simple-Talk.com: Вниз по кроличьей норе - исследование конвейеров, функций и параметров PowerShell .

ВкратцеВот основные моменты:

  1. Тело функции включает в себя начало , процесс и конец блоки.
  2. Функция, не указывающая явно ни один из вышеуказанных 3-х блоков, работает так, как будто весь код находится в блоке end ;следовательно, результат, который вы изначально наблюдали.
  3. A filter - это просто еще один способ написать функцию без какого-либо из вышеперечисленных 3 блоков, но весь код находится в процессе блок.Вот почему два приведенных выше ответа эквивалентны.
0 голосов
/ 18 сентября 2011

Если вы просто создадите Get-MoreInfo в качестве фильтра вместо функции, вы получите желаемый эффект.

Filter Get-MoreInfo
{
    param(    [Parameter(Mandatory = $true,ValueFromPipeline = $true)]
         $Process
    )
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...