Como encontrar o tempo médio de um array no PowerShell

1

Estou fazendo referência a uma lista que tem muitos dados na forma do tempo decorrido de um processo e estou tentando convertê-los em um formato em que posso encontrar a quantidade média de tempo decorrido.

Os dados parecem com algo assim:

ElapsedTime
0 hours, 1 minutes, 14 seconds
0 hours, 16 minutes, 2 seconds
0 hours, 4 minutes, 0 seconds
0 hours, 11 minutes, 59 seconds

Então, eu tenho os dados acima Importados em uma variável e extrai os dados numéricos usando esta fórmula:

$ElapsedHours, $ElapsedMinutes, $ElapsedSeconds = $TimeElapsed -split ', ' -split ' ' | Select -Index 0,2,4

De lá eu atribuo os valores a uma variável e uma instância de New-TimeSpan:

$ElapsedTimeSpanObject = New-TimeSpan -Hours $ElapsedHours -Minutes $ElapsedMinutes -Seconds -$ElapsedSeconds

Esta é a parte que fica complicada para mim. Os dois exemplos acima de código estão ocorrendo dentro de um loop Foreach e eu já criei um array em branco. Depois que o objeto de intervalo de tempo é criado, ele é inserido na matriz e examina o próximo valor de ElapsedTime.

Eu quero encontrar a média do array total.

Quando executo o código atual que tenho para tentar encontrar a Média, recebo um erro. Aqui está o código que estou usando:

$ElapsedTimespanCollection | Measure-Object -Average

A execução do código acima me dá esse erro para cada objeto na matriz:

Measure-Object : Input object "00:02:44" is not numeric. At line:1 char:30 + $ElapsedTimespanCollection | Measure-Object -Average + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidType: (00:02:44:TimeSpan) [Measure-Object], PSInvalidOperationException + FullyQualifiedErrorId : NonNumericInputObject,Microsoft.PowerShell.Commands.MeasureObjectCommand

Então, como faço para converter ou formatar essas medidas de tempo em algo que eu possa checar em sua média?

    
por cyborgcommando0 03.07.2018 / 22:34

2 respostas

3

Você pode usar TimeSpan para converter os dados para um tipo de tempo válido e, em seguida, use a propriedade .TotalSeconds para converter a string hh:mm:ss em um formato de hora, você pode obter segundos totais numéricos, etc. Existem outras propriedades métodos e você deve poder utilizar aqui para ajudar.

$ElapsedHours, $ElapsedMinutes, $ElapsedSeconds = $TimeElapsed -split ', ' -split ' ' | Select -Index 0,2,4
$ElapsedTimeSpanObject = New-TimeSpan -Hours $ElapsedHours -Minutes $ElapsedMinutes -Seconds -$ElapsedSeconds

## -- $ElapsedTimespanCollection = "00:02:44"
$ElapsedTimespanCollection = [TimeSpan]$ElapsedTimespanCollection 
$ElapsedTime.TotalSeconds

Mais recursos

  • Estrutura do TimeSpan

    Properties

    • Seconds: Gets the seconds component of the time interval represented by the current TimeSpan structure.

    Methods

    • Duration(): Returns a new TimeSpan object whose value is the absolute value of the current TimeSpan object.
por 03.07.2018 / 23:23
0

Este script usa um RegEx com (grupos de captura) para extrair horas, minutos e segundos de um csv embutido com uma string aqui. Cria um PSCustomObject de todos os dados de tempo

## Q:\Test18\SU_1336282.ps1
$TimeLapsed = @"
ElapsedTime
0 hours, 1 minutes, 14 seconds
0 hours, 16 minutes, 2 seconds
0 hours, 4 minutes, 0 seconds
0 hours, 11 minutes, 59 seconds
"@ | ConvertFrom-Csv -Delimiter '|'

$Elapsed = ForEach($row in $TimeLapsed) {
    if ($row -match '(?<HH>\d+) hours, (?<mm>\d+) minutes, (?<ss>\d+) seconds'){
        $TotalSecs = (3600 * $Matches.HH) +
                     (  60 * $Matches.mm) +
                        [int]$Matches.ss
        [PSCustomObject]@{
            Hour     = [int]$Matches.HH
            Minute   = [int]$Matches.mm
            Seconds  = [int]$Matches.ss
            TotalSecs= $TotalSecs
        }
    }
}
$Elapsed
$Elapsed | Measure TotalSecs -Average -Sum -MAx -Min|ft *

Exemplo de saída:

> .\SU_1336282.ps1

Hour Minute Seconds TotalSecs
---- ------ ------- ---------
   0      1      14        74
   0     16       2       962
   0      4       0       240
   0     11      59       719



Count Average  Sum Maximum Minimum Property
----- -------  --- ------- ------- --------
    4  498,75 1995     962      74 TotalSecs
    
por 04.07.2018 / 00:09