首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化PSObject创建

优化PSObject创建
EN

Stack Overflow用户
提问于 2014-07-02 00:04:20
回答 2查看 311关注 0票数 1

与下面的代码一样,处理脚本大约需要一个小时。我正在设法减少时间,因为这个脚本将安排每天运行。

我注意到,在创建新对象时,它会对每个标记使用相同的$_.Tag.Substring 1440次,并且有超过200个标记。

同时,使用度量对象3次通过相同的$_.Group进行处理以获得最小值、平均值和最大值。

我如何设置它们,使其不再重复这些相同的过程?

代码语言:javascript
复制
$data = Get-ChildItem $destinationPath\PPP_*.csv | 
    ForEach-Object { $_.FullName } | 
    Import-Csv -Header Tag, Value, Date, Time, Mode, Alarm

$data | ForEach-Object {
    [pscustomobject]@{
        "Column 1"  = $_.Tag.Substring(8,2)
        "Pump Unit" = $_.Tag.Substring(10,2)
        "Column 3"  = $_.Tag.Substring(12,2)
        "Column 4"  = $_.Tag.Substring(14,1)
        "Value"     = $_.Value
        "Time"      = $_.Time
    }
} | Export-Csv -Path "$destinationPath\Summary.csv" -NoTypeInformation

$data | Group-Object Tag | ForEach-Object {
    [pscustomobject]@{
        "Column 1"  = $_.Name.Substring(8,2)
        "Pump Unit" = $_.Name.Substring(10,2)
        "Column 3"  = $_.Name.Substring(12,2)
        "Column 4"  = $_.Name.Substring(14,1)
        "Minimum"   = ($_.Group | Measure-Object -Property Value -Minimum).Minimum
        "Average"   = ($_.Group | Measure-Object -Property Value -Average).Average
        "Maximum"   = ($_.Group | Measure-Object -Property Value -Maximum).Maximum
    }
} | Export-Csv -Path "$destinationPath\Statistics.csv" -NoTypeInformation
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-02 00:31:03

尝尝这个。我认为这需要PowerShell v3或更高版本才能使添加成员生成的属性“粘贴”到$data元素。

代码语言:javascript
复制
$data = $data | ForEach-Object {
  Add-Member -InputObject $_ NoteProperty -Name "Column 1"  -Value ($_.Tag.Substring(8,2))
  Add-Member -InputObject $_ NoteProperty -Name "Pump Unit" -Value ($_.Tag.Substring(10,2))      
  Add-Member -InputObject $_ NoteProperty -Name "Column 3"  -Value ($_.Tag.Substring(12,2))
  Add-Member -InputObject $_ NoteProperty -Name "Column 4"  -Value ($_.Tag.Substring(14,1))
  $_
}

$data | ForEach-Object {
  [pscustomobject]@{
    "Column 1"  = $_."Column 1"
    "Pump Unit" = $_."Pump Unit"
    "Column 3"  = $_."Column 3"
    "Column 4"  = $_."Column 4"
    "Value"     = $_.Value
    "Time"      = $_.Time
  }
} | Export-Csv -Path "$destinationPath\Summary.csv" -NoTypeInformation

为了避免测量对象的重复,请更改为:

代码语言:javascript
复制
$data | Group-Object Tag | ForEach-Object {
  $measInfo = $_.Group | Measure-Object -Property Value -Minimum -Maximum -Average
  [pscustomobject]@{
    "Column 1"  = $_.Group[0]."Column 1"
    "Pump Unit" = $_.Group[0]."Pump Unit"
    "Column 3"  = $_.Group[0]."Column 3"
    "Column 4"  = $_.Group[0]."Column 4"
    "Minimum"   = $measInfo.Minimum
    "Average"   = $measInfo.Average
    "Maximum"   = $measInfo.Maximum
  }
} | Export-Csv -Path "$destinationPath\Statistics.csv" -NoTypeInformation
票数 3
EN

Stack Overflow用户

发布于 2014-07-02 20:26:12

我从基思的代码中修改了一些,这样所有的东西都可以从一个ForEach-Object中处理

代码语言:javascript
复制
 Get-ChildItem $destinationPath\PPP_*.csv | 
    ForEach-Object { $_.FullName } | 
    Import-Csv -Header Tag, Value, Date, Time, Mode, Alarm | 
    Group-Object -Property Tag | 
    ForEach-Object {

        $tag        = $_.Name
        $column1    = $tag.Substring(8,2)
        $pumpUnit   = $tag.Substring(10,2)
        $column3    = $tag.Substring(12,2)
        $column4    = $tag.Substring(14,1)

        $_.Group | ForEach-Object {
            [pscustomobject]@{
                "Column 1"  = $column1
                "Pump Unit" = $pumpUnit
                "Column 3"  = $column3
                "Column 4"  = $column4
                "Value"     = $_.Value
                "Time"      = $_.Time
            }
        } | Export-Csv -Path "$destinationPath\Summary.csv" -Append -NoTypeInformation


        $measInfo = $_.Group | Measure-Object -Property Value -Minimum -Average -Maximum

        [pscustomobject]@{
            "Column 1"  = $column1
            "Pump Unit" = $pumpUnit
            "Column 3"  = $column3
            "Column 4"  = $column4
            "Minimum"   = $measInfo.Minimum
            "Average"   = $measInfo.Average
            "Maximum"   = $measInfo.Maximum
        } | Export-Csv -Path "$destinationPath\Statistics.csv" -Append -NoTypeInformation

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

https://stackoverflow.com/questions/24520980

复制
相关文章

相似问题

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