Как найти среднее время из массива в PowerShell

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

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

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

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

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

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

25
задан cyborgcommando0
12.12.2022 5:27 Количество просмотров материала 2757
Распечатать страницу

2 ответа

можно использовать 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

    свойства

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

    методы

    • продолжительность(): возвращает новый объект TimeSpan, значение которого является абсолютным значением текущего объекта TimeSpan.
3
отвечен Pimp Juice IT 2022-12-13 13:15

этот скрипт использует регулярное выражение с (capture groups) для извлечения часов, минут и секунд из встроенного csv со строкой here. Он создает PSCustomObject из всех временных данных

## 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 *

пример вывода:

> .\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
0
отвечен LotPings 2022-12-13 15:32

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх