以下代码返回预期列表。

$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
版权所有(C)2012 Microsoft Corporation。版权所有。

PS H:\> $ groups = ps |组的名字
PS H:\>
PS H:\> $ groups |排序对象名称| %{
>> $ g = $ _。Group |测量PM -Sum;
>>#新对象psobject -Property @ {Name2 = $ _。Name; Count = $ g.Count;总计= $ g.Sum}
>>选择-Property @ {Name ='Name';表达式= {$ _。Name}},@ {Name ='Count';表达式= {$ g.Count}},@ {名称='Sum';表达式= {$ g.Sum}}
>>}
>>
PS H:\>

最佳答案

select语句是一个独立的命令,因为它位于foreach块内,因此不会从管道接收任何输入。您必须将当前管道对象$_传递给select语句,以执行任何操作:

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

09-30 18:09
查看更多