PowerShell。组对象使用

PowerShell。组对象使用,powershell,split,Powershell,Split,大家好 我有一个日志文件,其中的行如下: 192.168.0.28 - - [10/Feb/2014:16:24:33 +0400] "GET http://yabs.yandex.ru/count/SkPKYklqq7a40000ZhP7Z2y5KfK1cm9kGxS193E8jW1RNmQ9frz84PXWdPSZ3QPeYg8taCczkTWB0m6g8wMlFhK2lA6enWAD0P6uxymm1e-pXw430f-Z_uc4auKDcGL2Z90-IQ2WMc82hv0-IPIJQI

大家好

我有一个日志文件,其中的行如下:

192.168.0.28 - - [10/Feb/2014:16:24:33 +0400] "GET http://yabs.yandex.ru/count/SkPKYklqq7a40000ZhP7Z2y5KfK1cm9kGxS193E8jW1RNmQ9frz84PXWdPSZ3QPeYg8taCczkTWB0m6g8wMlFhK2lA6enWAD0P6uxymm1e-pXw430f-Z_uc4auKDcGL2Z90-IQ2WMc82hv0-IPIJQIgdaouLgBOaDFy5fB00000DhlaDKclHOmpo1B41ieGGkPSZ3RlXnNxwbZbWAtaI HTTP/1.1" 302 868 TCP_MISS:DIRECT
192.168.0.69 - - [10/Feb/2014:16:24:34 +0400] "GET http://cdn.v.rtr-vesti.ru/_cdn_auth/secure/v/vh/vod_hls/definst/smil:vh/smil/967/362_d20140204202900.smil/media-b1296000_25.ts? HTTP/1.1" 200 1552555 TCP_MISS:DIRECT
192.168.0.31 - - [10/Feb/2014:16:24:34 +0400] "GET http://57.img.avito.st/140x105/446703657.jpg HTTP/1.1" 200 3674 TCP_MISS:DIRECT
192.168.0.31 - - [10/Feb/2014:16:24:34 +0400] "GET http://52.img.avito.st/140x105/628845352.jpg HTTP/1.1" 200 2836 TCP_MISS:DIRECT
192.168.0.29 - - [10/Feb/2014:16:24:35 +0400] "GET http://kad.arbitr.ru/Content/Static/Css/Common/cssie8.css HTTP/1.1" 404 2436 TCP_NEGATIVE_HIT:NONE
192.168.0.28 - - [10/Feb/2014:16:24:35 +0400] "GET http://www.google.com/jsapi HTTP/1.1" 200 6534 TCP_MISS:DIRECT
我使用以下Poweshell代码从该日志文件中提取信息:

$events_list = @()

Foreach ($line in gc 'D:\Downloads\test.txt') {
$substrings = [regex]::split($line,' ')
$cropped_url = [regex]::split($substrings[6],'/')

if ($cropped_url.Count -gt 4) {continue} 

$domain = $cropped_url[0] + "//" + $cropped_url[2]
$date = $substrings[3] -replace "\[", ""
$objLine = New-Object System.Object
$objLine | Add-Member -type NoteProperty -name IP -value $substrings[0]
$objLine | Add-Member -type NoteProperty -name Date -value $date
$objLine | Add-Member -type NoteProperty -name Domain -value $domain
$events_list += $objLine

}


$events_list | Group-Object -Property Domain | Sort-Object -Property Count -Descending | ft Count, Name -AutoSize >> D:\Downloads\domains.txt
我只是拆分这些字符串并创建一个具有有趣属性的对象

但我想在分组后收集有关字节的信息。我可以通过此cmdlet添加另一个属性,并从日志文件中获取其值:

$objLine | Add-Member -type NoteProperty -name Bytes -value $substrings[9]

但是,如何将此脚本生成的字节属性与分组对象相加,以获得从确切域下载的字节的总大小?

我想您正在寻找度量对象命令(别名为
Measure
)。它可用于计算管道中所有对象的给定特性之和

$bytesSum = ($events_list | measure -Sum Bytes).Sum
请注意,
measureobject
实际上返回一个
Microsoft.PowerShell.Commands.GenericMeasureInfo
对象

以下OP编辑和评论:

您可以使用
ForEach Object
命令(别名为
ForEach
)迭代每个组,然后使用
measure
命令计算给定组中所有项目的总和:

$events_list | Group-Object -Property Domain | foreach { ($_.Group | measure -Sum Bytes).Sum }

哦,我想在分组后获得相等域的总和。谢谢!我原来的帖子被另一个StackOverflow用户更正了,因为我的英语很差。它改变了问题的全部含义,我对此的看法。