Загрузка данных
# Скрипт: SystemInfoReport.ps1
# Выводит в текстовый файл:
# a) время последних 10 включений,
# b) 5 последних установленных обновлений с номерами KB,
# c) количество ошибок и предупреждений за последние 24 часа.
$outputFile = "$env:USERPROFILE\Desktop\SystemReport.txt"
# Очистка или создание файла
"" | Out-File -FilePath $outputFile -Encoding UTF8
# === 1. Последние 10 включений ===
Add-Content -Path $outputFile -Value "=== 1. Последние 10 включений компьютера ==="
$bootEvents = Get-WinEvent -FilterHashtable @{LogName='System'; ID=12,13,6009,6005,6006,6013} -MaxEvents 100 |
Where-Object { $_.Id -in 12,13,6005,6006,6009,6013 -and $_.Message -match 'загрузка|boot|startup|Event log started|запуск' } |
Sort-Object TimeCreated -Descending |
Select-Object -First 10
if ($bootEvents.Count -eq 0) {
Add-Content -Path $outputFile -Value "Не удалось найти события включений."
} else {
$i = 1
foreach ($evt in $bootEvents) {
Add-Content -Path $outputFile -Value "$i. $($evt.TimeCreated) (Event ID: $($evt.Id))"
$i++
}
}
Add-Content -Path $outputFile -Value ""
# === 2. Последние 5 установок обновлений ===
Add-Content -Path $outputFile -Value "=== 2. Последние 5 установленных обновлений ==="
try {
$updateSession = New-Object -ComObject Microsoft.Update.Session
$updateSearcher = $updateSession.CreateUpdateSearcher()
$historyCount = $updateSearcher.GetTotalHistoryCount()
if ($historyCount -gt 0) {
$history = $updateSearcher.QueryHistory(0, [Math]::Min(50, $historyCount))
$installed = $history | Where-Object { $_.ResultCode -eq 2 -or $_.ResultCode -eq 3 } | # 2=Успешно, 3=Установлено с ошибкой
Sort-Object Date -Descending |
Select-Object -First 5
if ($installed.Count -eq 0) {
Add-Content -Path $outputFile -Value "Нет записей об успешных установках обновлений."
} else {
foreach ($update in $installed) {
$kbMatch = [regex]::Match($update.Title, 'KB\d+')
$kbNumber = if ($kbMatch.Success) { $kbMatch.Value } else { "Нет KB" }
Add-Content -Path $outputFile -Value "$($update.Date) - $kbNumber - $($update.Title.Substring(0, [Math]::Min(80, $update.Title.Length)))"
}
}
} else {
Add-Content -Path $outputFile -Value "История обновлений пуста."
}
} catch {
Add-Content -Path $outputFile -Value "Ошибка при чтении истории обновлений: $_"
}
Add-Content -Path $outputFile -Value ""
# === 3. Количество ошибок и предупреждений за последние 24 часа ===
Add-Content -Path $outputFile -Value "=== 3. События за последние 24 часа ==="
$since = (Get-Date).AddHours(-24)
# Журналы: System и Application
$logs = @('System', 'Application')
$totalErrors = 0
$totalWarnings = 0
foreach ($log in $logs) {
try {
$errors = Get-WinEvent -FilterHashtable @{LogName=$log; Level=2; StartTime=$since} -ErrorAction SilentlyContinue
$warnings = Get-WinEvent -FilterHashtable @{LogName=$log; Level=3; StartTime=$since} -ErrorAction SilentlyContinue
$errCount = if ($errors) { $errors.Count } else { 0 }
$warnCount = if ($warnings) { $warnings.Count } else { 0 }
$totalErrors += $errCount
$totalWarnings += $warnCount
Add-Content -Path $outputFile -Value "Журнал $log : Ошибок = $errCount, Предупреждений = $warnCount"
} catch {
Add-Content -Path $outputFile -Value "Журнал $log : Доступ запрещён или нет событий."
}
}
Add-Content -Path $outputFile -Value "ИТОГО за 24 часа: Ошибок = $totalErrors, Предупреждений = $totalWarnings"
Add-Content -Path $outputFile -Value ""
# Финальная строка
Add-Content -Path $outputFile -Value "Отчёт сгенерирован: $(Get-Date)"
Write-Host "Отчёт сохранён в: $outputFile" -ForegroundColor Green