0dce7e7017831064dc11ee22a1d56e074722e54c
RDP Login Monitor
PowerShell-набор для мониторинга входов в Windows с отправкой уведомлений в Telegram:
Login_Monitor.ps1— основной монитор (Security4624/4625, RD Gateway302/303, ротация логов, heartbeat, ежедневный отчет).Watchdog_RDP_Monitor.ps1— watchdog: проверяет, жив ли основной скрипт, и перезапускает его при падении/зависании heartbeat.
Что изменилось (важное)
- Кодировка
.ps1: в репозитории добавлены.editorconfigи.gitattributes, чтобы*.ps1по умолчанию сохранялись как UTF-8 with BOM и с CRLF (это сильно снижает “кракозябры” и ошибки парсинга PowerShell). - Кодировка логов:
login_monitor.log/watchdog.logпишутся как UTF-8 с BOM (и при необходимости BOM добавляется к уже существующему файлу), чтобы в FAR/старых просмотрщиках не было ситуации “в консоли нормально, а в файле РЈРІРµ…” из‑за неверной авто-кодировки. - Фильтрация шума PMG/LDAP: добавлено узкое исключение для
4624сLogonType=3, еслиIpAddress=192.168.160.57иLogonProcessNameсодержитAdvapi(частые периодические сетевые логоны). auditpolна русской Windows: настройка/проверка аудита опирается на категориюВход/выходи подкатегорииВход в систему/Выход из системы(ожидается строкаУспех и сбой). Это устраняет ошибки вида0x00000057из‑за несуществующего на RU ОС имениLogon.- Стабильность:
auditpolзапускается черезcmd.exeс перехватомstdout+stderr, чтобы не ломать выполнение при$ErrorActionPreference = "Stop".
1) Подготовка
- Скопируйте
Login_Monitor.ps1вD:\Soft\Login_Monitor.ps1(или измените путь в watchdog). - Откройте
Login_Monitor.ps1и задайте:$TelegramBotToken$TelegramChatID
- Убедитесь, что существует
D:\Soft\Logs\(скрипт сам создаст при запуске). - Запускайте от имени администратора (нужен доступ к журналу
Security).
2) Ручной запуск
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "D:\Soft\Login_Monitor.ps1"
3) Запуск через Планировщик заданий (Task Scheduler)
Задание №1: основной монитор
Создайте задачу RDP Login Monitor:
- General
Run whether user is logged on or notRun with highest privilegesConfigure for: ваша версия Windows Server/Windows
- Triggers
At startup(при запуске системы)
- Actions
- Program/script:
powershell.exe - Add arguments:
-NoProfile -ExecutionPolicy Bypass -File "D:\Soft\Login_Monitor.ps1"
- Program/script:
- 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 notRun 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"
- Program/script:
- Settings
If the task is already running:Do not start a new instance
Если watchdog лежит не в
D:\Soft\, поправьте путь в аргументах или параметр-MainScriptPath.
4) Что проверять после запуска
- Логи:
D:\Soft\Logs\login_monitor.logD:\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 минут) — перезапускает монитор.
Languages
PowerShell
100%