1

Я ссылаюсь на список, который содержит много данных в виде истекшего времени процесса, и я пытаюсь преобразовать его в формат, в котором я могу найти среднее количество истекшего времени.

Данные выглядят примерно так:

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

Итак, я импортировал вышеупомянутые данные в переменную и извлек числовые данные, используя эту формулу:

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

Оттуда я присваиваю значения переменной и экземпляру New-TimeSpan:

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

Это часть, которая становится сложной для меня. Два приведенных выше примера кода выполняются в цикле Foreach, и я уже создал пустой массив. После того, как объект timespan создан, он вставляется в массив и просматривает следующее значение ElapsedTime.

Я хочу найти среднее из общего массива.

Когда я выполняю текущий код, который я пытаюсь найти Среднее, я получаю ошибку. Вот код, который я использую:

$ElapsedTimespanCollection | Measure-Object -Average

Выполнение приведенного выше кода дает мне эту ошибку для каждого объекта в массиве:

Объект измерения: входной объект "00:02:44" не является числовым. В строке: 1 символ: 30 + $ ElapsedTimespanCollection | Объект измерения -Average + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidType: (00: 02: 44: TimeSpan) [Measure-Object], PSInvalidOperationException + FullyQualifiedErrorId: NonNumericInputObject, Microsoft.PowerShell.Команды.MeasureObjectCommand

Итак, как мне преобразовать или отформатировать эти измерения времени во что-то, с чем я могу проверить их среднее значение?

2 ответа2

3

Вы можете использовать TimeSpan для преобразования данных в допустимый тип времени, а затем использовать .TotalSeconds для преобразования строки hh:mm:ss в формат времени, после чего вы можете получить общее количество секунд и т.д. Здесь вы можете использовать дополнительные методы и свойства, чтобы помочь.

$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

Дополнительные ресурсы

  • TimeSpan Структура

    свойства

    • Seconds: получает компонент секунд интервала времени, представленного текущей структурой TimeSpan.

    методы

    • Duration(): возвращает новый объект TimeSpan, значение которого является абсолютным значением текущего объекта TimeSpan.
0

Этот сценарий использует RegEx с (группы захвата) для извлечения часов, минут и секунд из встроенного CSV со строкой здесь. Это создает PSCustomObject из всех данных времени

## Q:\Test\2018\07\03\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 *

Образец вывода:

> .\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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .