Скрипт для суммирования общей продолжительности звонка в Powershell - PullRequest
0 голосов
/ 27 сентября 2018

Я собираю в PowerShell функцию, которая будет читать значение таблицы SQL для TotalCalls и TotalDuration.Поскольку идентификатор вызова уникален, я создал хеш-таблицу, в которой в качестве ключа будет использоваться идентификатор вызова с значениями TotalCalls и Total Duration.В конечном итоге отчет будет занимать месяцы, рассчитывая полный отчет с суммой TotalCalls и TotalDuration.Я сталкиваюсь с проблемой суммирования TotalDuration, так как это строка с "чч: мм: сс".Я знаю, что должен преобразовать его в тип данных timepan или int32, чтобы вычислить его, но мой ум бегает кругами о том, как это сделать.

 if ($FullReport)
{
    #Querying ALL ARD Lines
    $FullQuery = Select-SQL -Database Telecom_Database -Query 'SELECT * FROM ARDReports'

    $TotalDuration = 0
    $TotalCalls = 0

    $FullHash = [ordered]@{}

    foreach ($row in $FullQuery)
    {
        if ($FullHash.contains($row.AOR))
        {
            $FullHash[$row.AOR].TotalCalls += [int]$row.TotalCalls
            #$FullHash[$row.AOR].TotalDuration += formattime $row.TotalDuration

        } else
          {
            $FullHash.Add($row.AOR, [ordered]@{})
            $FullHash[$row.AOR].add("Name",$row.Name)
            $FullHash[$row.AOR].add("Description",$row.Description)
            $FullHash[$row.AOR].add("TotalCalls",[int]$row.TotalCalls)
            $FullHash[$row.AOR].add("TotalDuration",$row.TotalDuration)

          }  

    }

Строка # $ FullHash [$ row.AOR] .TotalDuration + = formattime , где он будет продолжать добавлять TotalDuration в зависимости от месяца, и это сводит меня с ума.Я думал о создании отдельной функции, которая вычисляла бы ее в промежуток времени, но я не знаю правильный подход.Любая помощь будет оценена!

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вы можете преобразовать из формата "чч: мм: сс" в объект временного диапазона, например:

$timeSpan = [TimeSpan]::Parse("12:34:08")

Это создаст объект со следующими свойствами:

Days              : 0
Hours             : 12
Minutes           : 34
Seconds           : 8
Milliseconds      : 0
Ticks             : 452480000000
TotalDays         : 0.523703703703704
TotalHours        : 12.5688888888889
TotalMinutes      : 754.133333333333
TotalSeconds      : 45248
TotalMilliseconds : 45248000

Вы можетедобавьте TimeSpans напрямую или суммируйте их в виде, скажем, тиков:

$FullHash[$row.AOR].TotalDuration += [TimeSpan]::Parse($row.TotalDuration).Ticks

Вы можете преобразовать его позже с небольшим количеством форматирования строки :

[TimeSpan]::FromTicks($FullHash[$row.AOR].TotalDuration).ToString("dd\.hh\:mm\:ss")

Что дает вывод, похожий на этот:

03.14:00:08
0 голосов
/ 27 сентября 2018

Строка может быть преобразована в TimeSpan и агрегирована.

$durations = @('00:22:00', '1:04:22', '12:01:01')
$tssum = New-TimeSpan

foreach ($duration in $durations) {
    $tssum += [timespan]$duration
    $tssum
}
0 голосов
/ 27 сентября 2018

Я сталкиваюсь с проблемой суммирования TotalDuration, поскольку его строка имеет вид "чч: мм: сс".Я знаю, что должен преобразовать его в интервал времени [...]

Это довольно просто в .NET - вы можете использовать TimeSpan.Parse():

$timespan = [timespan]::Parse("04:52:13")

или в вашей ситуации:

$timespan = [timespan]::Parse($row.TotalDuration)
...