首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PowerShell多维阵列中的参考元件

PowerShell多维阵列中的参考元件
EN

Stack Overflow用户
提问于 2015-05-11 12:56:31
回答 2查看 1.1K关注 0票数 0

我有CSV文件

我的PowerShell脚本尝试将SourceIP、DestinationIP和流量存储在多维数组中

代码语言:javascript
复制
$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列表

代码语言:javascript
复制
foreach ($q in $multi){
    write-host $q[0]
    write-host `n
}

但是相反,我得到了SourceIP,DestinationIP,流量,即

代码语言:javascript
复制
10.153.128.110


10.251.68.80


3.66 GB

如果我试着

代码语言:javascript
复制
foreach ($q in $multi){
    write-host $q[0][0][0]
    write-host `n

}

我得到了

代码语言:javascript
复制
1


1


3

如何排除故障?

更新

最终目标是

  1. 统计总业务量
  2. 如果SourceIP或目标IP符合某种模式,即10.251.22.x,则计算流量。
  3. 获得百分比

最新情况二

我能够获得代码来导入CSV并只统计总带宽,但我也需要来自具有特定模式的SourceIP和DestinationIP的带宽。

代码语言:javascript
复制
$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 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-11 17:21:23

不应将对象数组拆分为多个并行属性数组。当物体是完整的时,操作就容易多了。

代码语言:javascript
复制
$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
票数 2
EN

Stack Overflow用户

发布于 2015-05-11 20:26:22

PetSerAl有一个很好的转换方法,但是这里有一种方法需要迭代CSV一次,并给出您的百分比。

代码语言:javascript
复制
$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 } }

$trafficReport
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30168273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档