2016-09-13 9 views
1

私の目的は、イベント期間中のログファイルを検査し、ログエントリ(開始/終了)に基づいて期間を計算し、それらの期間の平均を計算する最後の24時間、それが特定の値よりも大きいかどうかを判断します(例として2時間使用します)。これまでは、最初の2つの部分が完成しました。ログを正しく調べて、適用可能な各ログの期間を計算しています。私は最後のステップからどこから始めるべきか、すべてのログからの期間の平均化を知りません。以下はこれまでの私のコードです。For Eachループ、平均を計算しようとしています

$imagesuccess = Get-ChildItem '\\server\osd_logs\success' -Directory | 
    Where-Object { 
     ($_.Name -like "P0*") -or (($_.Name -like "MININT*") -and 
     (Test-Path "$($_.FullName)\SCCM_C\Logs\SMSTSLog\Get-PSPName.log")) -and 
     ($_.LastWriteTime -gt (Get-Date).AddHours(-24)) 
    } 

$sccmlogpaths = "\\s0319p60\osd_logs\success\$($imagesuccess)\SCCM_C\Logs\SMSTSLog\smsts.log" 

foreach ($sccmlogpath in $sccmlogpaths) { 
    $imagestartline = Select-String -Pattern "<![LOG[New time:" -Path $sccmlogpath -SimpleMatch 
    $imagestarttime = $imagestartline.ToString().Substring(75, 8) 

    $imagefinishline = Select-String -Pattern "<![LOG[ Directory: M:\$($imagesuccess)" -Path $sccmlogpath -SimpleMatch 
    $imagefinishtime = $imagefinishline.ToString().Substring(71, 8) 

    $imageduration = New-TimeSpan $imagestarttime $imagefinishtime 
    $imagedurationstring = $imageduration.ToString() 
} 

答えて

1

大雑把にあなたがこれを行うだろう:

$durations = foreach ($sccmlogpath in $sccmlogpaths) { 
    # [snip] 

    $imageduration = New-TimeSpan $imagestarttime $imagefinishtime 

    $imageduration # the 'output' of the foreach() {} 
} 


# $durations is now an array of timespans 

$measurements = $durations | Measure-Object -Average -Property TotalHours 
$averageHours = $measurements.Average 

if (2.5 -lt $averageHours) { 
    # code here 
} 

これは、合計(N)/数(n)の平均化を行います。

NB。最後の-24時間を照会している場合、New-TimeSpanは、いずれかの期間が深夜を過ぎるとうまく動作しません。 23:01 - > 00:01が-23時間と表示されます。

+0

@RyanBemroseはい!総間違い、それを拾い上げてくれてありがとう。 (私はそれを修正するために編集しました)。 – TessellatingHeckler

+0

すごいアプローチ!私は配列を使うのが好きで、どこから始めるのかは分かりません。私はこの方法が大好きです。 1つの質問ですが、私は、私の継続時間が使用しているフォーマットでいくつかの問題にぶつかるかもしれないと思います。今、彼らはHH:MM:SSです。私はそのようにしてみたいと思います。それは平均化の方法でうまくいくのだろうか? – LilithGoddess

+0

@LilithGoddess配列には、使用する文字列形式に依存しないPowerShellの[TimeSpan]オブジェクトが含まれています。 –

関連する問題