90 lines
3.4 KiB
PowerShell
90 lines
3.4 KiB
PowerShell
$ErrorActionPreference = "Continue"
|
|
|
|
$ProjectDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$LogDir = Join-Path $ProjectDir "logs"
|
|
if (!(Test-Path -LiteralPath $LogDir)) {
|
|
New-Item -ItemType Directory -Path $LogDir | Out-Null
|
|
}
|
|
|
|
$ReportPath = Join-Path $LogDir ("diagnose_" + (Get-Date -Format "yyyyMMdd_HHmmss") + ".txt")
|
|
$Lines = New-Object System.Collections.Generic.List[string]
|
|
|
|
function Add-ReportLine([string]$Text = "") {
|
|
$Lines.Add($Text)
|
|
Write-Host $Text
|
|
}
|
|
|
|
Add-ReportLine "DocuTranslate diagnostic report"
|
|
Add-ReportLine ("Generated: " + (Get-Date))
|
|
|
|
$Os = Get-CimInstance Win32_OperatingSystem
|
|
Add-ReportLine ""
|
|
Add-ReportLine "===== System uptime ====="
|
|
Add-ReportLine ("Last boot: " + $Os.LastBootUpTime)
|
|
Add-ReportLine ("Uptime: " + ((Get-Date) - $Os.LastBootUpTime))
|
|
|
|
Add-ReportLine ""
|
|
Add-ReportLine "===== Power and restart events (last 14 days) ====="
|
|
$StartTime = (Get-Date).AddDays(-14)
|
|
$Events = Get-WinEvent -FilterHashtable @{ LogName = "System"; Id = @(41, 1074, 6005, 6006, 6008); StartTime = $StartTime } -ErrorAction SilentlyContinue |
|
|
Sort-Object TimeCreated -Descending |
|
|
Select-Object -First 30
|
|
if ($Events) {
|
|
foreach ($Event in $Events) {
|
|
$Message = ($Event.Message -replace "`r?`n", " ")
|
|
Add-ReportLine ("{0:yyyy-MM-dd HH:mm:ss} ID={1} Provider={2} Message={3}" -f $Event.TimeCreated, $Event.Id, $Event.ProviderName, $Message)
|
|
}
|
|
} else {
|
|
Add-ReportLine "No matching events found."
|
|
}
|
|
|
|
Add-ReportLine ""
|
|
Add-ReportLine "===== Scheduled tasks ====="
|
|
foreach ($TaskName in @("DocuTranslate", "DocuTranslateWatchdog")) {
|
|
$Task = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
|
|
if ($null -eq $Task) {
|
|
Add-ReportLine ("${TaskName}: NOT FOUND")
|
|
continue
|
|
}
|
|
$Info = Get-ScheduledTaskInfo -TaskName $TaskName
|
|
Add-ReportLine ("{0}: State={1}; LastRun={2}; LastResult={3}; NextRun={4}; Limit={5}" -f $TaskName, $Task.State, $Info.LastRunTime, $Info.LastTaskResult, $Info.NextRunTime, $Task.Settings.ExecutionTimeLimit)
|
|
}
|
|
|
|
Add-ReportLine ""
|
|
Add-ReportLine "===== Port 8010 ====="
|
|
$Connections = Get-NetTCPConnection -LocalPort 8010 -State Listen -ErrorAction SilentlyContinue
|
|
if ($Connections) {
|
|
foreach ($Connection in $Connections) {
|
|
$Process = Get-Process -Id $Connection.OwningProcess -ErrorAction SilentlyContinue
|
|
Add-ReportLine ("Listening: {0}:{1}; PID={2}; Process={3}" -f $Connection.LocalAddress, $Connection.LocalPort, $Connection.OwningProcess, $Process.ProcessName)
|
|
}
|
|
} else {
|
|
Add-ReportLine "Nothing is listening on port 8010."
|
|
}
|
|
|
|
Add-ReportLine ""
|
|
Add-ReportLine "===== HTTP health ====="
|
|
try {
|
|
$Response = Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:8010/service/meta" -TimeoutSec 8
|
|
Add-ReportLine ("HTTP status: " + $Response.StatusCode)
|
|
} catch {
|
|
Add-ReportLine ("HTTP failed: " + $_.Exception.Message)
|
|
}
|
|
|
|
foreach ($Name in @("autostart.log", "watchdog.log")) {
|
|
$Path = Join-Path $LogDir $Name
|
|
Add-ReportLine ""
|
|
Add-ReportLine ("===== Last 80 lines: " + $Name + " =====")
|
|
if (Test-Path -LiteralPath $Path) {
|
|
foreach ($Line in (Get-Content -LiteralPath $Path -Tail 80)) {
|
|
Add-ReportLine $Line
|
|
}
|
|
} else {
|
|
Add-ReportLine "Log file not found."
|
|
}
|
|
}
|
|
|
|
$Lines | Out-File -LiteralPath $ReportPath -Encoding utf8
|
|
Add-ReportLine ""
|
|
Add-ReportLine ("Report saved to: " + $ReportPath)
|