以下代码返回预期列表。
$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 }}
}