Как стать автором
Поиск
Написать публикацию
Обновить

О том, как я приручил Wi‑Fi с помощью PowerShell и чуть‑чуть ИИ

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.2K

Задача

Дома и в командировках меня раздражали внезапные «тихие» обрывы Wi‑Fi. Хотелось, чтобы система сама возвращала подключение, но не спорила со мной, если я сознательно нажал «Отключить Wi‑Fi». И чтобы всё было прозрачно: логи, автозапуск, минимум магии.

Ограничения

  • Windows 10/11 и PowerShell 5.1+ — без сторонних демонов.

  • Никаких паролей в логах и странных автологинов.

  • Автоматика не должна мешать: ручное отключение — табу.

Архитектура

  • WifiMonitor.ps1 — наблюдение за стабильностью (ping, события), диагностика, логи.

  • WiFiAutoReconnect.ps1 — восстановление через netsh к доверенным сетям, игнор ручных отключений.

  • Планировщик задач — два фоновых задания с автозапуском и повышенными правами.

  • Логи и конфигурация — C:\ProgramData\WiFiDiag.

Реализация

Фильтр «ручного отключения»

  • Проверяю событие WLAN‑AutoConfig ID 8002 и статус адаптера (Disabled). Если это «воля пользователя», переподключение не стартует.

Критерий «реального обрыва»

  • Серия неудачных ping до надёжной цели (у меня 1.1.1.1); после порога срабатывает восстановление. Это лучше, чем одиночные «шумы».

Восстановление

  • Скрипт сканирует доступные сети и:

    • в приоритете пытается вернуться к последней успешной;

    • иначе — к первой из списка доверенных, профили которых уже есть в Windows.

  • Пароли не пишутся и не читаются в явном виде — работает механизм профилей Windows.

Логирование

  • Каждое действие записывается в C:\ProgramData\WiFiDiag\wifi-reconnect.log с таймстемпами: от «ping упал (2/3)» до «подключено к SSID».

Автозапуск и эксплуатация

Задача

Дома и в командировках меня раздражали внезапные «тихие» обрывы Wi‑Fi. Хотелось, чтобы система сама возвращала подключение, но не спорила со мной, если я сознательно нажал «Отключить Wi‑Fi». И чтобы всё было прозрачно: логи, автозапуск, минимум магии.

Ограничения

  • Windows 10/11 и PowerShell 5.1+ — без сторонних демонов.

  • Никаких паролей в логах и странных автологинов.

  • Автоматика не должна мешать: ручное отключение — табу.

Архитектура

  • WifiMonitor.ps1 — наблюдение за стабильностью (ping, события), диагностика, логи.

  • WiFiAutoReconnect.ps1 — восстановление через netsh к доверенным сетям, игнор ручных отключений.

  • Планировщик задач — два фоновых задания с автозапуском и повышенными правами.

  • Логи и конфигурация — C:\ProgramData\WiFiDiag.

Реализация

Фильтр «ручного отключения»

  • Проверяю событие WLAN‑AutoConfig ID 8002 и статус адаптера (Disabled). Если это «воля пользователя», переподключение не стартует.

Критерий «реального обрыва»

  • Серия неудачных ping до надёжной цели (у меня 1.1.1.1); после порога срабатывает восстановление. Это лучше, чем одиночные «шумы».

Восстановление

  • Скрипт сканирует доступные сети и:

    • в приоритете пытается вернуться к последней успешной;

    • иначе — к первой из списка доверенных, профили которых уже есть в Windows.

  • Пароли не пишутся и не читаются в явном виде — работает механизм профилей Windows.

Логирование

  • Каждое действие записывается в C:\ProgramData\WiFiDiag\wifi-reconnect.log с таймстемпами: от «ping упал (2/3)» до «подключено к SSID».

Автозапуск и эксплуатация

Завёл две задачи планировщика. Да, на первом заходе поймал 0x800700b7: «уже существует». Решение — удалять/пересоздавать атомарно:

powershell

$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -DontStopOnIdleEnd
$trigger  = New-ScheduledTaskTrigger -AtStartup
$wifiMon  = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File `"C:\Scripts\WifiMonitor.ps1`""
$wifiAuto = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File `"C:\Scripts\WiFiAutoReconnect.ps1`""

@(
  @{ Name="WifiMonitor";       Action=$wifiMon  },
  @{ Name="WiFiAutoReconnect"; Action=$wifiAuto }
) | ForEach-Object {
  if (Get-ScheduledTask -TaskName $_.Name -ErrorAction SilentlyContinue) {
    Unregister-ScheduledTask -TaskName $_.Name -Confirm:$false
  }
  Register-ScheduledTask -TaskName $_.Name -Action $_.Action -Trigger $trigger -Settings $settings -RunLevel Highest
}

После регистрации — мгновенный ручной старт обеих задач и проверка логов.

Мелкие победы и одна «засада»

  • Самая коварная ошибка прилетела раньше — когда парсер PowerShell решил, что второй param в файле — это параметры скрипта, а не функции. Лечится просто: блок param внутри функции должен стоять первой строкой тела, сразу после «{» и на своей строке.

  • Для самоуспокоения я добавил опциональный мини‑самотест (AST‑парсинг, поиск «заблудившихся» param, скрытых символов и подсказка по кодировке UTF‑8 BOM). Его можно включать в строгом режиме на старте, пока идёт активная разработка.

Результат

  • Система возвращает Wi‑Fi автоматически, но не спорит со мной, если я его отключил намеренно.

  • Логи говорят сами за себя — следить за поведением легко.

  • Всё работает после переустановки ОС: задачи планировщика и скрипты восстанавливаются одной командой.

Что дальше

  • Экспоненциальный бэк‑офф и несколько целевых хостов для ping.

  • Ротация логов и уровни важности.

  • Встроенный самотест — по умолчанию в warn‑режиме; strict — только на CI/первичном развертывании.

Немного про ИИ в процессе

ИИ здесь — как «старший коллега», который помогает не закапываться в рутину и держит фокус на устойчивости. Он:

  • предложил разбивку обязанностей и строгий фильтр ручного отключения;

  • подсветил риск с param внутри функций и дал безопасный шаблон;

  • собрал атомарную команду для пере‑регистрации задач, чтобы не ловить 0x800700b7.

Это не «магия», а ускоритель. Решения остаются моими — и предсказуемыми.

🔹 Промпт для генерации PowerShell‑скрипта авто‑восстановления Wi‑Fi

Скопируйте и вставьте этот текст в свой любимый ИИ‑инструмент, чтобы получить рабочий, прозрачный и обратимый скрипт.

Code

Напиши на PowerShell 5.1+ скрипт, который:

[Личность]
Ты — старший системный инженер и архитект по автоматизации Windows (PowerShell 5.1+). Практикуешь безопасные, самодиагностирующиеся решения: минимум внешних зависимостей, явные логи, превентивные проверки, уважение к намеренным действиям пользователя (не «чинить» то, что он отключил сам).
1. Проверяет текущее состояние Wi‑Fi‑адаптера в Windows.
2. Если адаптер отключён пользователем — ничего не делает.
3. Если соединение потеряно, пытается переподключиться к сохранённой сети.
4. Логирует все действия в текстовый файл с датой и временем.
5. Поддерживает автозапуск через Планировщик задач.
6. Сохраняет кодировку UTF‑8 без BOM.
7. Перед применением выводит превью плана действий.
8. Не требует сторонних модулей.
[Инструкция]
Твоя задача — улучшать и расширять проект автопереподключения Wi‑Fi (WifiMonitor.ps1 + WiFiAutoReconnect.ps1) без лишних вопросов. Работай на опережение: предлагай и внедряй улучшения сразу, если они повышают устойчивость, прозрачность или безопасность. По итогам каждого шага:
- кратко фиксируй, что именно ты сделал и зачем;
- давай чёткий пошаговый план запуска начиная с диагностики окружения;
- самопроверяй код (синтаксис, AST/скобки, «заблудившиеся» param, скрытые символы) и исправляй найденное.

[Ресурсы/Контекст]
- ОС: Windows 10/11, PowerShell 5.1+.
- Каталоги: C:\Scripts (код), C:\ProgramData\WiFiDiag (логи/конфиги).
- Задачи планировщика: WifiMonitor, WiFiAutoReconnect.
- Требования: игнор ручного отключения (WLAN 8002 + Disabled), логирование, автозапуск, надёжность.
- Нельзя хранить пароли в логах/плейнтексте; опирайся на профили Windows.

[Алгоритм/Подача]
1) Диагностика среды: версии, права, политика выполнения, доступ к netsh, каталоги/права.
2) Самотест: AST-парсинг текущих файлов, поиск лишних param, скрытых символов, подсказки по кодировке (UTF‑8 BOM), баланс скобок.
3) Улучшения «на опережение»: 
   - отказоустойчивость (экспоненциальная задержка, бэк‑офф);
   - чёткие критерии обрыва (серии ping, fallback хосты);
   - разделение обязанностей (мониторинг/восстановление);
   - безопасная работа с профилями (без утечки паролей);
   - логи с ротацией и уровнем важности.
4) Отчёт: что изменено, где, почему. Дай diff/фрагменты.
5) План запуска: команды и порядок действий. 
6) Самопроверка: запускай встроённый быстрый линт/самотест и исправляй.

[Критерии качества]
- Никаких интерактивных зависаний в фоновом режиме.
- Понятные логи и коды возврата. Стабильность важнее украшательств.
- Меньше зависимостей: без модулей — по умолчанию; если модуль критичен — проверяй/ставь опционально.
- Никаких паролей в явном виде. Не ломай намерения пользователя (ручное отключение — уважать).

[Выходной формат]
- Сначала перечисли ключевые изменения короткими маркерами (что/зачем).
- Затем дай шаги запуска (диагностика → установка → проверка).
- Потом приложи обновлённые фрагменты кода или весь файл, если изменений много.
- В конце — краткий самоотчёт: «что сделал», «что проверил», «что осталось».

[Начинай]
Считай, что проект уже развёрнут по базовой схеме. Сразу предложи и внедри улучшения, затем выдай инструкции запуска и самоотчёт.

💡 Подсказка: после генерации кода запросите у ИИ «Покажи пошагово, что делает каждая строка» — так вы сразу получите и рабочее решение, и полноценный разбор логики.

Если вам хочется такой же спокойной жизни с Wi‑Fi: начните с логов, нарежьте ответственность на два скрипта, уважайте решение пользователя и не забывайте про одноразовые «засады» парсера. Дальше — только приятные мелочи.

Теги:
Хабы:
0
Комментарии2

Публикации

Ближайшие события