如何独立处理组的值?
例如,我有以下分组:
$grouping = Get-ChildItem -Recurse | Group-Object Extension
我想对每组分组的子项目执行一些操作:
foreach ($group in $grouping}
{
$group.Values | Measure-Object
}
(Measure-Object
只是实际操作的替身。我知道可以直接通过$grouping
进行计数。)
我期待的是:
Count : 96
Average :
Sum :
Maximum :
Minimum :
Property :
Count : 12
Average :
Sum :
Maximum :
Minimum :
Property :
Count : 14
Average :
Sum :
Maximum :
Minimum :
Property :
我得到的是:
Count : 122
Average :
Sum :
Maximum :
Minimum :
Property :
Measure-Object
cmdlet将为整个管道实例化一次,而不是每个值集实例化一次。
如何为每组值实例化一次?
20150220版本:
我把实际的问题作为一个单独的问题,但要具体得多。
我得到的输出与@BaconBits在您的代码中报告的输出相同。我能够得到你想要的输出的方法是使用以下内容:
foreach ($group in $grouping)
{
$group.Group | Measure-Object
}
但这只是针对您提供的样本,而可能不是您的实际问题。
如果这仍然不适用于你,你需要更明确地与你的问题和样品,如果可能的话。
当我运行代码时,我得到:
Count : 1
Average :
Sum :
Maximum :
Minimum :
Property :
但我每找到一个扩展就得到一次。
我不确定你想做什么,但当我运行这个$group.Values
时,它是一个System.Collections.ArrayList
,但只包含一个值。
因此$grouping.Values
显示(例如):
.pdf
.txt
.txtfoo
.ps1
<etc.>
$grouping[0].Values
,也就是第一次迭代的$group.Values
,显示:
.pdf
就是这样。
我的猜测是,你要么希望foreach ($group in $Grouping.Values)
遍历每个扩展,要么像@Matt说的那样,你应该引用$group.Group
来获得该分组中的项目集合。我不知道是哪一个,因为我不知道你到底想做什么。