PTah b032de9d1c Use ASCII-only source for Telegram and logs; remove emoji (v1.2.0)
Prevents mojibake/parse errors when the .ps1 is saved with wrong encoding after download. RU auditpol subcategory names remain via Uc(); Telegram messages and Write-Log are English.
2026-04-27 10:24:09 +10:00

RDP Login Monitor

PowerShell-набор для мониторинга входов в Windows с отправкой уведомлений в Telegram:

  • Login_Monitor.ps1 — основной монитор (Security 4624/4625, RD Gateway 302/303, ротация логов, heartbeat, ежедневный отчет).
  • Watchdog_RDP_Monitor.ps1 — watchdog: проверяет, жив ли основной скрипт, и перезапускает его при падении/зависании heartbeat.
  • Install-ScheduledTasks.ps1 — создание в Планировщике заданий с теми же именами и параметрами, что в разделе 3 (нужна повышенная PowerShell).

Что изменилось (важное)

  • Кодировка .ps1: в репозитории добавлены .editorconfig и .gitattributes, чтобы *.ps1 по умолчанию сохранялись как UTF-8 with BOM и с CRLF (это сильно снижает “кракозябры” и ошибки парсинга PowerShell).
  • Кодировка логов: login_monitor.log / watchdog.log пишутся как UTF-8 с BOM (и при необходимости BOM добавляется к уже существующему файлу), чтобы в FAR/старых просмотрщиках не было ситуации “в консоли нормально, а в файле РЈРІРµ…” из‑за неверной авто-кодировки.
  • auditpol на русской Windows: настройка/проверка аудита опирается на категорию Вход/выход и подкатегории Вход в систему / Выход из системы (ожидается строка Успех и сбой). Это устраняет ошибки вида 0x00000057 из‑за несуществующего на RU ОС имени Logon.
  • Стабильность: auditpol запускается через cmd.exe с перехватом stdout+stderr, чтобы не ломать выполнение при $ErrorActionPreference = "Stop".

1) Подготовка

  1. Скопируйте в D:\Soft\ как минимум Login_Monitor.ps1 и Watchdog_RDP_Monitor.ps1 (для установки из скрипта — ещё Install-ScheduledTasks.ps1), либо измените пути в параметрах установщика / в watchdog.
  2. Откройте Login_Monitor.ps1 и задайте:
    • $TelegramBotToken
    • $TelegramChatID
  3. Убедитесь, что существует D:\Soft\Logs\ (скрипт сам создаст при запуске).
  4. Запускайте от имени администратора (нужен доступ к журналу Security).

2) Ручной запуск

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "D:\Soft\Login_Monitor.ps1"

3) Запуск через Планировщик заданий (Task Scheduler)

Задания можно завести вручную в GUI (ниже) или одной командой из PowerShell — см. Install-ScheduledTasks.ps1 (в начале файла стоит #Requires -RunAsAdministrator). Скрипт регистрирует RDP Login Monitor (старт ОС, запуск Login_Monitor.ps1) и RDP Login Monitor Watchdog (старт ОС + повтор каждые 5 минут, запуск Watchdog_RDP_Monitor.ps1 из того же каталога). Пути по умолчанию: D:\Soft\. Параметры: -InstallRoot, -MainTaskName, -WatchdogTaskName, -WatchdogRepeatMinutes, задержки случайного старта и т.д.

Пример после копирования файлов в D:\Soft\:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "D:\Soft\Install-ScheduledTasks.ps1"

Это не заменяет настройку токена Telegram в Login_Monitor.ps1, а только регистрирует задания.

Задание №1: основной монитор (вручную)

Создайте задачу RDP Login Monitor:

  • General
    • Run whether user is logged on or not
    • Run with highest privileges
    • Configure for: ваша версия Windows Server/Windows
  • Triggers
    • At startup (при запуске системы)
  • Actions
    • Program/script: powershell.exe
    • Add arguments:
      -NoProfile -ExecutionPolicy Bypass -File "D:\Soft\Login_Monitor.ps1"
      
  • Settings
    • If the task is already running: Do not start a new instance

Задание №2: watchdog (вручную)

Создайте задачу RDP Login Monitor Watchdog:

  • General
    • Run whether user is logged on or not
    • Run with highest privileges
  • Triggers
    • At startup
    • Дополнительно: Repeat task every 5 minutes (или отдельный триггер по расписанию каждые 5 минут)
  • Actions
    • Program/script: powershell.exe
    • Add arguments:
      -NoProfile -ExecutionPolicy Bypass -File "D:\Soft\Watchdog_RDP_Monitor.ps1"
      
  • Settings
    • If the task is already running: Do not start a new instance

Если watchdog лежит не в D:\Soft\, поправьте путь в аргументах или параметр -MainScriptPath.

4) Что проверять после запуска

  • Логи:
    • D:\Soft\Logs\login_monitor.log
    • D:\Soft\Logs\watchdog.log
  • Heartbeat:
    • D:\Soft\Logs\last_heartbeat.txt обновляется примерно раз в час (по $HeartbeatInterval).
  • Telegram при старте: при установленном RD Session Host (или аналогичных компонентах RDS, не только шлюз) — строка про входы по RDP/RDS на этом сервере; при доступном журнале RD Gateway — отдельная строка про подключения к внутренним целевым ПК через шлюз (302/303). Узел только с ролью RD Gateway не дублирует формулировку «хост сессий».

5) Автоматический перезапуск при падении

Watchdog_RDP_Monitor.ps1 делает:

  • проверяет, есть ли процесс powershell.exe/pwsh.exe с Login_Monitor.ps1 в командной строке;
  • если процесса нет — запускает монитор;
  • если heartbeat старше $HeartbeatStaleMinutes (по умолчанию 90 минут) — перезапускает монитор.
S
Description
Мониторинг логинов по RDP с оповещением в telegram, баном и разбаном
Readme MIT 7.2 MiB
Languages
PowerShell 100%