我有CSV文件

我的PowerShell脚本尝试将SourceIP、DestinationIP和流量存储在多维数组中
$source = @((Import-Csv D:\Script\my.csv).SourceIP)
$dest = @((Import-Csv D:\Script\my.csv).DestinationIP)
$t = @((Import-Csv D:\Script\my.csv).Traffic)
$multi = @($source),@($dest),@($t)当我尝试从$multi的第一个元素中读取时,我希望得到一个SourceIP列表
foreach ($q in $multi){
write-host $q[0]
write-host `n
}但是相反,我得到了SourceIP,DestinationIP,流量,即
10.153.128.110
10.251.68.80
3.66 GB如果我试着
foreach ($q in $multi){
write-host $q[0][0][0]
write-host `n
}我得到了
1
1
3如何排除故障?
更新
最终目标是
最新情况二
我能够获得代码来导入CSV并只统计总带宽,但我也需要来自具有特定模式的SourceIP和DestinationIP的带宽。
$t = @((Import-Csv D:\Script\my.csv).Traffic)
foreach ($k in $t){
write-host $k
}
foreach ($i in $t){
$j += ,@($i.split(" "))
}
foreach ($m in $j){
switch ($m[1]){
GB {
$m[0] = [int]($m[0]) * 1000
$m[1] = 'MB'
}
MB {}
KB {
$m[0] = [int]($m[0]) / 1000
$m[1] = 'MB'
}
}
$total_bandwidth += $m[0]
}
write-host Total bandwidth is ("{0:N2}" -f $total_bandwidth) MB 发布于 2015-05-11 17:21:23
不应将对象数组拆分为多个并行属性数组。当物体是完整的时,操作就容易多了。
$Scale=@{
B=1e00
KB=1e03
MB=1e06
GB=1e09
TB=1e12
}
$TrafficBytes={
$a=-split$_.Traffic
[double]$a[0]*$Scale[$a[1]]
}
Import-Csv D:\Script\my.csv|
ForEach-Object $TrafficBytes|
Measure-Object -Sum #total traffic
Import-Csv D:\Script\my.csv|
Where-Object {$_.DestinationIP-like'10.*'}| #condition
ForEach-Object $TrafficBytes|
Measure-Object -Sum #traffic by condition发布于 2015-05-11 20:26:22
PetSerAl有一个很好的转换方法,但是这里有一种方法需要迭代CSV一次,并给出您的百分比。
$filter = "10.251.22.*"
$Scale=@{
B=1e00
KB=1e03
MB=1e06
GB=1e09
TB=1e12
}
$myCsv = Import-Csv D:\Script\my.csv | Select-Object *, @{ Name = "TrafficBytes"; Expression = { $a = -split $_.Traffic; [double] $a[0] * $Scale[$a[1]] } }
$trafficFiltered = $myCsv | Group-Object { $_.SourceIP -like $filter -or $_.DestinationIP -like $filter } | Select-Object @{ Name = "IPFilter"; Expression = { if ($_.Name -eq $true) { $filter } else { "Other" } } }, @{ Name = "TrafficBytes"; Expression = { ($_.Group | Measure-Object -Sum "TrafficBytes").Sum } }
$trafficTotal = $myCsv | Measure-Object -Sum TrafficBytes
$trafficReport = Select-Object IPFilter, TrafficBytes, @{ Name = "Percent"; Expression = { "{0:P}" -f $_.TrafficBytes / $trafficTotal.Sum * 100.0 } }
$trafficReporthttps://stackoverflow.com/questions/30168273
复制相似问题