# SATRIX Repair System

Консольная система диагностики, обслуживания и подготовки компьютеров для мастера.

Переносимый консольный диагностический скрипт для Windows 7, 10 и 11. Он быстро собирает факты, применяет встроенные диагностические правила и сохраняет отчеты:

- `TXT` — короткий читаемый отчет для мастера;
- `JSON` — полный набор данных для фильтрации, сравнения и дальнейшего анализа.
- `*-ChatGPT.md` — обезличенная выжимка для загрузки в ChatGPT, если оформлена заявка.

Обычная диагностика работает только на чтение. Изменения доступны отдельно в меню «Быстрые действия» и выполняются только после явного подтверждения.

## Быстрый старт

Дважды нажмите `Start-PC-Diagnostics.cmd`. Скрипт сразу запросит права администратора через стандартное окно UAC, после чего откроет одно меню:

1. `Диагностика ПК` — отдельный экран сценариев быстрой, профильной и глубокой проверки;
2. `Очистка и обслуживание` — безопасная очистка, исправления и мониторы Windows;
3. `Инструменты мастера` — поиск устройств и серверов, порты, аудит Windows/Linux и исправления;
4. `Справочники и системные оснастки` — расшифровка кодов, отчёты и оснастки;
5. `Передача ПК клиенту` — создание нового локального администратора и безопасное удаление профиля мастера.

Результат появится в папке `Reports`. Других launcher-файлов выбирать не нужно.

Во время диагностики используется один живой экран: общий таймер и таймер
текущего модуля обновляются четыре раза в секунду, общий прогресс считается по
фактически завершённым этапам, а движущийся индикатор показывает активную
операцию. Число этапов автоматически меняется вместе с профилем, режимом,
анализом дампов, Windows Update и серверной проверкой. Ниже выводятся последние
реальные результаты модулей. После завершения экран сменяется итогом с
проблемами, рекомендациями и путями к файлам.

Каждый прогон сохраняет локальные `TXT`, `JSON` и при наличии заявки
`*-ChatGPT.md`. В `Reports\Report-History.jsonl` ведётся индекс всех отчётов,
а в `Logs\PC-Diagnostics-YYYY-MM-DD.jsonl` — журнал запусков, этапов, очисток,
исправлений и ошибок. Секреты активации, токены, адреса и телефоны в
технический журнал не записываются.

## Режим мастера: сеть и сервер

Режим проводит мастера по одной цепочке:

1. проверяет IPv4, шлюз, DNS, интернет, маршруты и прокси ноутбука;
2. предлагает подтверждённую частную сеть RFC1918, по умолчанию не шире `/22`;
3. параллельно обнаруживает узлы через ICMP, ARP и TCP-пробы;
4. показывает IP, имя, MAC, задержку, признаки роли и уровень уверенности;
5. проверяет серверный профиль либо все TCP-порты `1–65535`;
6. читает безопасные баннеры HTTP/SSH/FTP/SMTP и TLS-сертификаты;
7. если установлен Nmap, запускает только `-sT -sV --version-light` для уже
   найденных открытых портов — без bruteforce, exploit и NSE vuln-скриптов;
8. выполняет read-only аудит Windows Server по PowerShell Remoting либо
   Linux/NAS по OpenSSH с ключом/SSH Agent;
9. показывает проблемы простыми словами, предлагает отдельные подтверждаемые
   исправления и повторяет проверку;
10. сохраняет TXT/JSON, baseline портов и отправляет детальный снимок в
    защищённый отчёт выбранной заявки.

Автоматически разрешены только частные IPv4-сети и не больше 1024 адресов за
один запуск. Выбранный сервер обязан входить в подтверждённый диапазон.
Публичный периметр, перебор паролей и эксплуатация уязвимостей этим режимом не
выполняются.

Встроенный сканер является основным и не требует стороннего ПО. Если
`nmap.exe` установлен в `PATH` или `Program Files\Nmap`, он автоматически
уточняет продукт и версию службы. Сам Nmap в ZIP не включён.

Аудит Windows собирает диски/тома, Storage Reliability, роли, stopped automatic
services, события Disk/NTFS/StorPort/WHEA/VSS, SMB, ресурсы и разрешения,
firewall, listeners, Defender, локальных администраторов, Guest, NLA, время,
VSS writers и статус backup. Linux собирает ОС, uptime, память, файловые
системы, block/RAID, интерфейсы, listeners, failed units, время, firewall,
Samba, journal, обновления и признаки backup.

Пароли не сохраняются. Windows credential живёт только в памяти процесса.
Linux-аудит использует SSH-ключ/Agent; пароль в командную строку не передаётся.
Опасные действия вроде удаления данных сервера, автоматического изменения ACL,
включения Linux firewall или перезагрузки не выполняются.

Центр очистки сначала рассчитывает доступный объём, а удаляет файлы только
после подтверждения. Безопасный набор включает старые временные файлы
пользователя и Windows, кэш Chrome/Edge/Firefox и кэш шейдеров DirectX,
NVIDIA/AMD. Куки, пароли, профили браузеров, документы и загрузки не
затрагиваются. Корзина, Microsoft Store и crash dump очищаются отдельными
действиями; дампы сопровождаются предупреждением, поскольку они нужны для
разбора сбоев.

## Передача ПК клиенту без данных мастера

Раздел `Передача ПК клиенту` работает в два этапа, чтобы не оставить компьютер
без рабочего администратора:

1. из учётной записи мастера создаётся новый локальный пользователь клиента,
   ему назначаются права администратора, а состояние передачи сохраняется в
   защищённой папке `%ProgramData%\PC-Diagnostics\Handoff`;
2. мастер выходит из Windows и проверяет вход под новым пользователем;
3. уже из новой учётной записи запускается
   `Finish-PC-Handoff.cmd` из этой папки;
4. после повторного явного подтверждения удаляются старая локальная учётная
   запись, её профиль, локальные данные OneDrive/браузеров, токены входа,
   DPAPI-ключи и корзина старого SID.

При создании можно выбрать постоянный пароль, временный автоматически
сгенерированный пароль для последующей настройки Windows Hello PIN или вход
без пароля. PIN нельзя назначить другому пользователю из администраторской
сессии: новый владелец создаёт его после первого входа в
`Параметры → Учётные записи → Варианты входа`. Временный пароль показывается
один раз и не попадает в состояние передачи или журнал. Вариант без пароля
помечен как небезопасный и требует отдельной контрольной фразы; Windows по
умолчанию ограничивает такой локальный аккаунт консольным входом и блокирует
сетевую аутентификацию.

Активный профиль удалить нельзя: завершение разрешено только из заранее
созданной новой учётной записи, SID которой записан на первом этапе.
Системные профили `Public`, `Default` и каталоги вне `C:\Users` защищены от
удаления. Дампы/WER и журналы событий очищаются только отдельными
подтверждениями, поскольку они могут быть нужны для ремонта.

Локальное удаление учётной записи не удаляет привязку компьютера на серверах
Microsoft. После передачи откройте `https://account.microsoft.com/devices` и
удалите устройство из своей учётной записи.

Для следующих чистых установок удобнее не входить под личной Microsoft-учёткой:
на экране первого запуска Windows можно нажать `Ctrl+Shift+F3`, выполнить
настройку в Audit Mode, а перед передачей вернуть ПК в OOBE через Sysprep.
Утилита показывает инструкцию, но намеренно не запускает Sysprep автоматически.

Из PowerShell:

```powershell
Set-ExecutionPolicy -Scope Process Bypass
.\PC-Diagnostics.ps1 -Mode Express -DiagnosticProfile Software
.\PC-Diagnostics.ps1 -Mode Quick
```

Расширенная проверка с дампами и запросом доступных драйверов Windows Update:

```powershell
.\PC-Diagnostics.ps1 -Mode Deep -AnalyzeDumps -CheckDriverUpdates
```

Даже в Deep-режиме длительные `SFC /verifyonly` и `DISM /ScanHealth` по
умолчанию не запускаются: сначала выполняется быстрый `DISM /CheckHealth`.
Чтобы намеренно добавить проверку на 10–40 минут:

```powershell
.\PC-Diagnostics.ps1 -Mode Deep -RunSlowIntegrityScan
```

В интерактивном меню этот выбор запрашивается отдельно. Во время SFC/DISM
живой экран показывает прошедшее время и последний процент, который реально
вывела системная утилита.

Обычный рабочий запуск требует одноразовый код из личного Telegram-бота
мастера. Бот показывает только активированные заявки, а после успешной
отправки отчёта заявка и консольная сессия автоматически закрываются.
Для локальной разработки без заявки нужен явный параметр
`-AllowOfflineDiagnostic`; он не добавляется в публичный ярлык.

Добавить обезличенный анализ по центральной базе Finland:

```powershell
.\PC-Diagnostics.ps1 -Mode Quick -UseServerAnalysis
```

Выбрать только нужный профиль без меню:

```powershell
.\PC-Diagnostics.ps1 -DiagnosticProfile Drivers -CheckDriverUpdates -UseServerAnalysis
.\PC-Diagnostics.ps1 -DiagnosticProfile Freezes -AnalyzeDumps -UseServerAnalysis
.\PC-Diagnostics.ps1 -DiagnosticProfile Windows -Mode Standard
.\PC-Diagnostics.ps1 -DiagnosticProfile Hardware -Mode Standard
```

Сохранить отчеты в выбранную папку:

```powershell
.\PC-Diagnostics.ps1 -Mode Standard -OutputDirectory D:\Diag
```

Расшифровать отдельный код без запуска диагностики:

```powershell
.\PC-Diagnostics.ps1 -ExplainCode CM43
.\PC-Diagnostics.ps1 -ExplainCode STOP:0x124
.\PC-Diagnostics.ps1 -ExplainCode 0x80070005
.\PC-Diagnostics.ps1 -ExplainCode 0xC0000005
```

Обозначение `CM` используется для кодов диспетчера устройств, `STOP:` — для BSOD. Полные восьмизначные HRESULT/NTSTATUS можно передавать как есть.

## Что проверяется

- версия, сборка, разрядность и время загрузки Windows;
- модель ПК и корпуса, плата, BIOS/UEFI, Secure Boot, TPM и BitLocker;
- CPU, модули RAM по слотам, GPU, мониторы, аудио, сеть, батарея и оптические приводы;
- физические диски, firmware, карта «диск → раздел → том», файловая система и свободное место;
- полный список PnP-устройств и сводка по классам диспетчера устройств;
- свободное место и dirty bit файловых систем;
- SMART failure prediction через WMI и состояние `Get-PhysicalDisk`, если API доступен;
- Storage Reliability Counters: температура, наработка, износ, неисправленные ошибки и задержки;
- расширенный ATA/SATA/NVMe SMART через `smartctl`, если smartmontools установлен;
- температуры, вентиляторы, нагрузка, частоты, мощность и напряжения через LibreHardwareMonitor;
- все PnP-устройства и коды ошибок диспетчера устройств;
- версия, дата, поставщик, INF и цифровая подпись драйверов;
- текущая загрузка CPU, committed memory, активность и очередь диска;
- верхние процессы по памяти/CPU-time, автозагрузка, защитные продукты, pagefile и план питания;
- отдельная оценка доверия процессов: цифровая подпись, SHA-256, путь запуска, системные имена-двойники, автозапуск/службы и активные соединения;
- критичные и ошибочные события `System` и `Application`;
- Kernel-Power, WHEA, BugCheck, Disk, NTFS, StorAHCI/StorPort/NVMe, Display, DriverFrameworks, Service Control Manager, Application Error/Hang;
- ожидание перезагрузки;
- minidump, `MEMORY.DMP` и user-mode dump;
- `SFC /verifyonly` в Standard/Deep и `DISM /ScanHealth` в Deep;
- доступные драйверные пакеты Windows Update по явному ключу `-CheckDriverUpdates`.
- центральная расшифровка неизвестных кодов и проверка метаданных драйверов по `-UseServerAnalysis`.
- карточка выезда: клиент, адрес, дата, время жалобы и проверки, описание проблемы;
- отправка краткой карточки в Telegram через защищённый серверный шлюз.
- сохранение обезличенного технического снимка у заявки на сервере;
- смета, прайс, скидки, оплата, расходы, заработок, маршрут и напоминания в личном Telegram-боте.
- рекомендации услуг по описанию заявки и последней диагностике; услуги никогда не добавляются в смету автоматически.
- официальные ссылки на драйверы OEM, Intel, AMD, NVIDIA и Microsoft по обнаруженной конфигурации.
- режим мастера: выбранная локальная сеть, поиск серверов, полный TCP-скан,
  классификация роли, аудит Windows/Linux, исправления и сравнение с baseline.

## Заявка, Telegram и отчёт для ChatGPT

В интерактивном режиме утилита предложит оформить заявку. Полный TXT/JSON остаётся на
ПК мастера. Markdown для ChatGPT автоматически исключает имя клиента, адрес, имя ПК,
имя пользователя, серийные номера, Hardware ID, пути и полный текст событий.

Telegram отправляется только после отдельного подтверждения. Токен бота никогда не
хранится в клиентском ZIP. Клиент использует ключ мастера:

```powershell
$env:PC_DIAGNOSTICS_OPERATOR_KEY = 'выданный-сервером-ключ'
.\PC-Diagnostics.ps1 -DiagnosticProfile Hardware `
  -ActivationCode ABCD2345
```

Сервер хранит структурированную заявку, историю статусов, смету и технический
снимок диагностики. Обычный режим ПК не отправляет серийные номера, Hardware
ID, IP/MAC, пути, командные строки и полный текст событий. В `Режиме мастера`
точная карта выбранной сети, IP/MAC, порты и серверный аудит намеренно
сохраняются только в защищённом отчёте активированной заявки для последующего
ремонта и сравнения; в Telegram выводится краткое резюме.

Основные команды личного бота:

```text
/price драйвер
/service 3031798 DRV_SEARCH
/service 3031798 2500 Своя услуга
/discount 3031798 10
/bill 3031798
/paid 3031798 5000 700 наличные
/income 2026-07
/remind 3031798 60
/report 3031798
/unknowns
```

При появлении новой неизвестной сигнатуры сервер создаёт одну обезличенную
запись и присылает мастеру пакетное Telegram-уведомление с кнопкой
«Очередь сигнатур». Повторные появления увеличивают счётчик, но не создают
дубли уведомлений; неудачная отправка автоматически повторяется. После
добавления точного или безопасного смыслового правила историческая сигнатура
автоматически помечается решённой и исчезает из `/unknowns`.

У заявки есть кнопки маршрута в Яндекс/Google Картах. Они используют текущее
местоположение телефона и не требуют платного API. Для автоматического ETA
между двумя точными координатами понадобится отдельный ключ карт.

## Встроенные утилиты

- LibreHardwareMonitor 0.9.6 используется локально для чтения датчиков. Его GUI
  также лежит в `third_party\LibreHardwareMonitor`.
- В `third_party\smartmontools` находится официальный установщик smartmontools 7.5.
  Установка запускается только из подтверждаемого меню; после неё следующий прогон
  использует `smartctl`.
- Nmap является необязательным внешним расширением и автоматически
  обнаруживается, но не распространяется в комплекте.

Версии, лицензии и контрольные суммы перечислены в `THIRD_PARTY_NOTICES.md`.

## Режимы

| Режим | Окно событий | Нагрузка | Целостность Windows | Дампы |
|---|---:|---:|---|---|
| `Express` | 6 часов | 1 снимок | пропущена | пропущены |
| `Quick` | 24 часа | 2 снимка | пропущена | только с `-AnalyzeDumps` |
| `Standard` | 72 часа | 3 снимка | `DISM /CheckHealth`; SFC только с `-RunSlowIntegrityScan` | только с `-AnalyzeDumps` |
| `Deep` | 30 дней | 5 снимков | `DISM /CheckHealth`; SFC/ScanHealth только с `-RunSlowIntegrityScan` | автоматически |

`Express` проверяет основные комплектующие, устройства, базовый SMART, нагрузку, критичные службы, DNS/прокси и свежие события. Обычно он занимает 20–60 секунд. `Quick` обычно укладывается в 40–90 секунд. `Standard` и `Deep` без медленной проверки обычно занимают минуты; дампы, Windows Update и большой журнал событий всё ещё могут увеличить время. `-RunSlowIntegrityScan` отдельно добавляет SFC/DISM и обычно занимает ещё 10–40 минут.

## Анализ дампов

Скрипт ищет `cdb.exe`, `kd.exe`, `windbg.exe` или `dumpchk.exe` в `PATH` и стандартных каталогах Windows SDK. Если отладчик найден, для нескольких свежих дампов выполняется `!analyze -v`, а в отчет попадают:

- BugCheck-код и его краткая расшифровка;
- `IMAGE_NAME`;
- `Probably caused by`;
- ограниченный фрагмент вывода анализа.

Если Debugging Tools for Windows не установлен, скрипт все равно перечислит найденные дампы и сопоставит BSOD с событиями BugCheck 1001, когда они доступны.

`Probably caused by` — гипотеза WinDbg, не готовый диагноз. Например, `ntoskrnl.exe` почти никогда не означает, что нужно заменять «драйвер ядра»: нужно смотреть стек, WHEA, устройства и повторяемость.

## Как трактовать «актуальность» драйверов

Универсального безопасного каталога «последней версии» для всех OEM-компьютеров и устройств нет. Одна и та же модель чипа может требовать разные пакеты у производителя ноутбука, платы или устройства. Поэтому скрипт:

1. фиксирует точную установленную версию, дату, поставщика, INF и подпись;
2. выделяет ошибки устройств, неподписанные и очень старые важные драйверы;
3. по `-CheckDriverUpdates` спрашивает Windows Update о доступных драйверных пакетах;
4. рекомендует финально сверять BIOS, chipset, storage, GPU и network с сайтом производителя конкретной модели.

Обычная диагностика Windows Update ничего не устанавливает — выполняется только
поиск. Отдельный пункт меню быстрых действий позволяет выбрать конкретные
пакеты, пытается создать точку восстановления, затем отдельно скачивает и
устанавливает только подтверждённые позиции. BIOS/UEFI и firmware накопителей
через этот пункт устанавливать не следует. На Windows 7 полнота результата
ограничена прекращенной поддержкой самой ОС и доступностью старых серверов обновлений.

Центральный сервер также не заявляет, что произвольный OEM-драйвер является «самым свежим». Он объединяет применимые пакеты, которые Windows Update нашёл именно для этого ПК, с проверкой подписи, версии, возраста и централизованными диагностическими правилами.

## Серверный анализ и приватность

Endpoint: `https://satrixveil.online/api/pc-diagnostics/analyze`.

На сервер передаются только:

- вид и код ошибки;
- provider и ID события без полного текста;
- имя класса/модели устройства, поставщик, версия, дата и состояние подписи драйвера;
- обезличенная версия Windows и версия диагностического скрипта;
- метаданные применимых драйверных пакетов Windows Update.

Не отправляются имя компьютера, имя пользователя, серийные номера, PNP/Hardware/Device ID, IP из отчёта, полные пути и командные строки процессов, полный текст событий. Для неизвестных сигнатур сервер хранит только нормализованный код/provider/ID, счётчик и время появления.

Если в активированной заявке найдены `.dmp`, до трёх свежих файлов могут быть отдельно переданы по HTTPS в закрытое хранилище заявки. Сервер проверяет тип, размер и SHA-256, не пересылает дамп в Telegram и автоматически удаляет его по сроку хранения (по умолчанию 30 дней). Один файл ограничен 128 MB, весь отчёт — 256 MB. Отключение: `-SkipArtifactUpload`. Дампы способны содержать данные из памяти клиента, поэтому мастер должен согласовать их сохранение в рамках ремонта.

Если сервер недоступен, локальная проверка и отчёты продолжают работать.

## Windows 11: Recall и Copilot

В быстрых действиях есть встроенный policy-only набор. Он использует
документированные Microsoft-политики `DisableAIDataAnalysis` и
`TurnOffWindowsCopilot`, перед изменением сохраняет прежние значения в
`%ProgramData%\PCDiagnostics\Backups` и умеет откатывать реестр.

Запрет Recall может удалить уже сохранённые снимки; вернуть их из резервной
копии реестра невозможно. Политика Windows Copilot устаревающая и не удаляет
новое отдельное приложение Microsoft Copilot. Поэтому утилита не запускает
удалённые `irm | iex`-скрипты и не удаляет системные пакеты вслепую. Для более
агрессивного удаления можно отдельно изучить
[RemoveWindowsAI](https://github.com/zoicware/RemoveWindowsAI) и
[Win11Debloat](https://github.com/raphire/win11debloat), закрепив конкретный
commit и проверив его на тестовом ПК.

## Практический порядок диагностики фризов

1. Запустить Quick от администратора и открыть начало TXT-отчета.
2. Сначала проверить `Critical` и `Error`: SMART, WHEA, Disk/NTFS, problem devices и BugCheck.
3. Затем сопоставить время жалобы с группами событий и дампами.
4. Если есть WHEA — убрать разгон/XMP/undervolt и тестировать железо до переустановки Windows.
5. Если есть Disk 7/51/153, StorPort 129, NTFS 55 — сначала резервная копия, затем кабель/слот/SMART/прошивка.
6. Если есть Display 4101, VIDEO_TDR или DPC watchdog — проверить чистую установку GPU/storage/chipset/network-драйверов, питание и температуры.
7. Повторить Standard/Deep, только если быстрая проверка не дала достаточных фактов.

Событие Kernel-Power 41 означает лишь, что предыдущая работа Windows завершилась некорректно. Оно не доказывает неисправность блока питания: причину ищут по WHEA, BugCheck, volmgr, состоянию диска, температурам и обстоятельствам отключения.

## Совместимость и ограничения

- Windows 7 SP1: требуется PowerShell 3.0 или новее, рекомендуется Windows Management Framework 5.1.
- Для аппаратных датчиков на Windows 7 может потребоваться .NET Framework 4.8 и актуальная поддержка SHA-2. Если библиотека не загрузится, остальные разделы продолжат работу.
- Windows 10/11: штатного Windows PowerShell 5.1 достаточно.
- PowerShell 7 не обязателен; рекомендуется запускать именно `powershell.exe`, потому что Windows Update Agent использует COM.
- Часть SMART/NVMe/RAID/USB-мостов не отдает здоровье через стандартный WMI. Для подтверждения используйте фирменную утилиту или специализированный SMART-инструмент.
- Снимок нагрузки длится несколько секунд и не заменяет запись трассы во время самого фриза.
- Серийные номера устройств и локальные пути попадают в JSON. Проверьте файл перед отправкой третьим лицам.

## Проверка самого скрипта

```powershell
.\PC-Diagnostics.ps1 -SelfTest
.\PC-Diagnostics.ps1 -MenuSelfTest
```

`-SelfTest` проверяет справочники, нормализацию BugCheck/HRESULT, коды
диспетчера устройств и защитные правила удаления профилей.
`-MenuSelfTest` автоматически открывает все консольные разделы и ловит ошибки
переменных, пустых выборок и рендеринга меню без выполнения очистки или
изменения учётных записей.
