$last2rel = Get-CimInstance -ClassName Win32_ReliabilityStabilityMetrics | Sort-Object TimeGenerated | Select-Object -Last 2 $time0 = $last2rel[0].TimeGenerated $time1 = $last2rel[1].TimeGenerated $rel0 = $last2rel[0].SystemStabilityIndex $rel1 = $last2rel[1].SystemStabilityIndex switch ($rel1 - $rel0) { {$_ -gt 0} { $arrow = "↑"; break } {$_ -eq 0} { $arrow = "→"; break } {$_ -lt 0} { $arrow = "↓"; break } } $outstr = "安定性指標:`n`n" $outstr += "{0,-16} {1,-16}" -f $time0.ToString("yyyy/MM/dd HH:mm"), $time1.ToString("yyyy/MM/dd HH:mm") $outstr += "`n---------------- ----------------`n" $outstr += "{0,16:N2} {1,14:N2} {2}" -f $rel0, $rel1, $arrow $eventime0 = $last2rel[1].StartMeasurementDate $eventime1 = $last2rel[1].EndMeasurementDate $records = Get-CimInstance -ClassName Win32_ReliabilityRecords |Where-Object {($_.TimeGenerated -ge $eventime0) -and ($_.TimeGenerated -lt $eventime1)} | Sort-Object TimeGenerated $outstr |Out-Host if ($records.Count -eq 0) { "`n`nイベント:`n信頼性に関連するログは記録されていません。" } else { "`n`nイベント:" $records |Select-Object TimeGenerated, @{Name="EventId"; Expression={$_.EventIdentifier}}, LogFile, Message |Out-Host $answer = Read-Host "イベントの詳細を表示しますか? (Y/N)" if ($answer.ToUpper() -eq "Y") { $results = foreach ($record in $records) { $event = Get-WinEvent -FilterHashtable @{ LogName = $record.LogFile Id = $record.EventIdentifier } -ErrorAction SilentlyContinue | Where-Object { $_.RecordId -eq $record.RecordNumber } | Select-Object -First 1 [PSCustomObject]@{ TimeGenerated = $record.TimeGenerated SourceName = $record.SourceName EventID = $record.EventIdentifier LogFile = $record.LogFile LevelDisplayName = $event.LevelDisplayName Message = $record.Message } } Foreach($result in $results) { $result Read-Host "Enterキーで次へ" } "(終了)" } }