【问题标题】:Powershell Select-Object from array not working数组中的Powershell Select-Object不起作用
【发布时间】:2010-06-16 10:16:29
【问题描述】:

我正在尝试将数组中的值分开,以便将它们传递给另一个函数。

我在 for 循环中使用 select-Object 函数遍历每一行并将时间戳和值字段分开。

然而,不管我做什么,下面的代码只显示每行的第一个选择对象变量。第二个 select-object 命令似乎不起作用,因为我的输出是 6 行中的每一行的空行。

关于如何获得这两个值的任何想法

$ReportData = $SystemStats.get_performance_graph_csv_statistics( (,$Query) )


### Allocate a new encoder and turn the byte array into a string
$ASCII = New-Object -TypeName System.Text.ASCIIEncoding
$csvdata = $ASCII.GetString($ReportData[0].statistic_data) 

$csv2 = convertFrom-CSV $csvdata


$newarray = $csv2 | Where-Object {$_.utilization -ne "0.0000000000e+00" -and   $_.utilization -ne "nan" }


    for ( $n = 0; $n -lt $newarray.Length; $n++)
    {
       $nTime =  $newarray[$n]
       $nUtil =  $newarray[$n]
       $util = $nUtil | select-object Utilization
       $util
       $tstamp = $nTime | select-object timestamp
       $tstamp

    }

【问题讨论】:

    标签: powershell arrays


    【解决方案1】:

    让我稍微修改一下处理代码,如果有帮助的话。

    $csv2 | 
      Where-Object {$_.utilization -ne "0.0000000000e+00" -and   $_.utilization -ne "nan" } |
      Select-Object Utilization,TimeStamp
    

    它会产生一些不同的输出,但这应该更适合使用。 结果是具有 Utilization 和 TimeStamp 属性的对象。您可以将它们传递给您提到的另一个函数。

    通常最好使用管道而不是 for 循环。您不需要关心索引,它适用于数组以及标量值。


    如果我更新的代码不起作用:TimeStamp 属性是否真的填充了任何值?

    【讨论】:

    • 抱歉回复晚了。我添加了您的代码并得到了一个有趣的输出。利用率显示正确,但时间戳循环 6 次。是什么原因造成的以及如何停止它编辑我认为代码工作正常并且初始 convertfrom-CSV cmd 导致时间戳问题
    • 如果你可以发布它,很高兴看到源数据$csvdata 和你的预期输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多