Estou fazendo referência a uma lista que possui muitos dados na forma do tempo decorrido de um processo e estou tentando convertê-los em um formato em que possa encontrar a quantidade média de tempo decorrido.
Os dados são mais ou menos 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 extraia os dados numéricos usando esta fórmula:
$ElapsedHours, $ElapsedMinutes, $ElapsedSeconds = $TimeElapsed -split ', ' -split ' ' | Select -Index 0,2,4
A partir daí, atribuo os valores a uma variável e a uma instância do New-TimeSpan:
$ElapsedTimeSpanObject = New-TimeSpan -Hours $ElapsedHours -Minutes $ElapsedMinutes -Seconds -$ElapsedSeconds
Essa é a parte que fica mais complicada para mim. Os dois exemplos de código acima estão ocorrendo em um loop Foreach e eu já criei uma matriz em branco. Depois que o objeto de intervalo de tempo é criado, ele é inserido na matriz e examina o próximo valor ElapsedTime.
Eu quero encontrar a média da matriz 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:
Objeto de medida: o objeto de entrada "00:02:44" não é numérico. Na linha: 1 caractere: 30 + $ ElapsedTimespanCollection | Measure-Object -Average + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidType: (00: 02: 44: TimeSpan) [Objeto de medida], 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 comparar em relação à sua média?
fonte
Respostas:
Você pode usar o TimeSpan para converter os dados em um tipo de horário válido e, em seguida, usar a
.TotalSeconds
propriedade para converter ahh:mm:ss
seqüência de caracteres em um formato de horário, para obter o total numérico de segundos, etc. Existem métodos e propriedades adicionais que você deve utilizar aqui para Socorro.Recursos adicionais
Estrutura TimeSpan
fonte
00:00:00
para um tipo de hora para poder converter para outro tipo de dados numérico e tal. Fico feliz em ajudar ainda mais se você perguntar, então me avise.Measure-Object -Average
com uma matriz dehh:mm:ss
seqüências de caracteres ou com duração de tempo para esse assunto, mas você já deve saber comoMeasure-Object -Average
recuperar uma média para o conjunto de matrizes ou qualquer outra coisa. Eu tenho que me afastar, mas vou fazer o check-in mais tarde.$ElapsedTimespanCollection += $ElapsedTimeSpanObject.TotalSeconds
Depois, fiz o código abaixo e ele me fornece o que eu preciso.$FindElapsedTimeSpanAverage = ($ElapsedTimespanCollection | Measure-Object -Average).Average
$ElapsedTimeSpanAverageObject = New-TimeSpan -Seconds $FindElapsedTimeSpanAverage
GraçasEste script usa um RegEx com (grupos de captura) para extrair horas, minutos e segundos de um csv embutido com uma string here. Ele cria um PSCustomObject a partir de todos os dados de tempo
Saída de amostra:
fonte