If ( Is64Bit ) { $BlueScreenView = $Global:ToolsDirectory + '\BlueScreenView-x64.exe' } Else { $BlueScreenView = $Global:ToolsDirectory + '\BlueScreenView-x86.exe' } If ( !(Test-Path $BlueScreenView) ) { Write-Error "File does not exist: ${BlueScreenView}" ; Return } # Remove existing BSOD report $BSODReport = $Global:OutputDirectory + '\BSODReport.txt' If ( Test-Path $BSODReport ) { Write-Output "Deleting existing BSOD report: ${BSODReport}" ; Remove-Item $BSODReport -Force -ErrorAction SilentlyContinue } # Run BlueScreenView Start-Process $BlueScreenView -ArgumentList "/stext ${BSODReport} /sort ~1" -Wait # Wait for BSOD report For ($i = 0; $i -lt 1200; $i++) { If ( Test-Path $BSODReport ) { Break } Start-Sleep -Seconds 1 } # Exit if the BSOD report was not created If ( !(Test-Path $BSODReport) ) { Write-Output "BSOD report was not found: ${BSODReport}" ; Return } # Create ticket $BSODReportContent = $(Get-Content -Path $BSODReport) -join "`n" New-RMMTicket -Subject "System Crash on ${Env:COMPUTERNAME}" -InitialIssue $BSODReportContent # Update the ticket New-TicketComment -Comment "It looks like your computer crashed. I'll get this resolved as soon as possible." # Wait a bit Start-Sleep -Seconds 120 # Setup providers for matching BSOD report content $ProviderMicrosoft = 'Microsoft|Windows' # Get the provider data from the most recent BSOD $CulpritProvider = $BSODReportContent[12..13] -join '`n' Switch ( $CulpritProvider ) { { $_ -match $ProviderMicrosoft } { New-TicketComment -Comment "I've analyzed the crash report and it indicates a problem with a Windows component. I'll repair the system now." New-TicketTimerEntry -Comment "Analysis indicates crash caused by Windows component(s). Scanning and repairing corruption in the system." Source-PSScript -ScriptName "Fix-WindowsHealth" } }