2014-10-23 4 views
1

Следующий код возвращает ожидаемый список.Select-Object не возвращает объект?

$groups = ps | group Name 

$groups | Sort-Object Name | % { 
    $g = $_.Group | measure PM -Sum; 
    New-Object psobject -Property @{ Name2 = $_.Name; Count = $g.Count; Sum = $g.Sum } 
} 

Однако, следующий сценарий, который использует select для создания пользовательского объекта, ничего не возвращает? Я читал, что Select-object - это еще один способ создать PSObject?

$groups = ps | group Name 

$groups | Sort-Object Name | % { 
    $g = $_.Group | measure PM -Sum; 
    select -Property @{ Name = 'Name'; expression = { $_.Name }}, 
        @{ Name = 'Count'; expression = { $g.Count }}, 
        @{ Name = 'Sum'; expression = { $g.Sum }} 
} 

Обновление: Испытано его на Powershell 2.0 и 3.0. Они ведут себя одинаково.

 
Windows PowerShell 
Copyright (C) 2012 Microsoft Corporation. All rights reserved. 

PS H:\> $groups = ps | group Name 
PS H:\> 
PS H:\> $groups | Sort-Object Name | % { 
>>  $g = $_.Group | measure PM -Sum; 
>>  # New-Object psobject -Property @{ Name2 = $_.Name; Count = $g.Count; Sum = $g.Sum } 
>>  select -Property @{ Name = 'Name'; expression = { $_.Name }}, @{ Name = 'Count'; expression = { $g.Count }}, @{ Name = 'Sum'; expression = { $g.Sum }} 
>> } 
>> 
PS H:\> 
+0

Протестировано в PS 2.0, и все работает отлично. –

+0

Я тестировал на трех машинах (два 3.0 и один 2.0), а второй скрипт ничего не возвращал на всех трех машинах. – ca9163d9

ответ

2

select утверждения является автономной командой не получает какой-либо вход от трубопровода, так как он находится внутри foreach блока. Вы, должны передать текущий объект конвейера $_ для выбора заявления для того, чтобы сделать что-нибудь:

$groups | Sort-Object Name | % { 
    $g = $_.Group | measure PM -Sum; 
    $_ | select -Property @{ Name = 'Name'; expression = { $_.Name }}, 
        @{ Name = 'Count'; expression = { $g.Count }}, 
        @{ Name = 'Sum'; expression = { $g.Sum }} 
} 
1

Если вы хотите использовать Select рассмотреть возможность этот маршрут:

$groups = ps | group Name 

$groups | Sort-Object Name | 
    select -Property @{ Name = 'Name'; expression = { $_.Name }}, 
        @{ Name = 'Count'; expression = { $_.Group.Count }}, 
        @{ Name = 'Sum'; expression = { $_.Group | measure PM -Sum | Select -Expand Sum }} 

Я удалил ForEach, и переместил создание $ g, чтобы просто быть выражением для Sum.

Смежные вопросы