Отправка письма при входе в Windows через PowerShell и Планировщик задач
Быстрые ссылки
- Запуск PowerShell из Планировщика задач
Зачем это нужно
Классический Планировщик задач Windows умеет запускать программы по событию (например, при входе в систему), но встроенный механизм отправки почты часто неудобен. Простая и переносимая альтернатива — запуск PowerShell и команда Send-MailMessage (или использование сохранённого учётного файла), чтобы отправлять уведомления на e‑mail.
Как настроить задачу (пошагово)
- Нажмите Win + R, введите control schedtasks и нажмите Enter, чтобы открыть Планировщик задач.

- Нажмите Create Task… (Создать задачу).

- На вкладке Общие укажите имя и описание задачи. Выберите опцию «Run whether user is logged on or not» (Запускать независимо от того, вошёл ли пользователь).

- На вкладке Триггеры добавьте новый триггер. Выберите срабатывание At log on (при входе в систему). Это заставит задачу запускаться при логине пользователя.

- На вкладке Действия добавьте новое действие: Start a program (Запустить программу). В поле Program/script укажите powershell. В поле Arguments вставьте команду, которая отправит письмо.
Пример команды (вставьте в поле Arguments):
-Command "Send-MailMessage -From 'someone@gmail.com' -To 'someone@gmail.com' -Subject 'LOGIN' -Body 'Someone Just Logged In' -SmtpServer 'smtp.gmail.com' -Port 587 -Credential (Get-Credential) -UseSsl"Примечание: приведённая строка использует Get-Credential для интерактивного запроса учётных данных. Если задача запускается без интерактивной сессии, храните учётные данные безопасно (см. раздел Безопасность).
- На вкладке Условия снимите галочку Start the task only if the computer is on AC power — иначе на ноутбуках задача не будет срабатывать при питании от батареи.

- Нажмите OK и сохраните задачу. Теперь при следующем входе в систему задача запустит PowerShell и попытается отправить почту.

Практические советы по безопасности и надёжности
Important: Никогда не храните пароль в открытом виде в аргументах задачи. Ниже — безопасные варианты хранения учётных данных и предотвращения блокировки со стороны почтового провайдера.
- Используйте сохранённый зашифрованный файл с учётными данными:
# Выполните один раз под учётной записью, под которой будет запускаться задача
$cred = Get-Credential
$cred | Export-Clixml -Path 'C:\secure\smtp-cred.xml'
# В рабочем скрипте при запуске задачи
$cred = Import-Clixml -Path 'C:\secure\smtp-cred.xml'
Send-MailMessage -From 'someone@gmail.com' -To 'someone@gmail.com' -Subject 'LOGIN' -Body 'User logged in' -SmtpServer 'smtp.gmail.com' -Port 587 -Credential $cred -UseSslExport-Clixml шифрует секреты для конкретного пользователя и компьютера, поэтому файл нельзя просто скопировать на другой ПК и использовать.
Для Gmail: предпочитайте использование App Password (пароля приложения) если у вас включена двухфакторная аутентификация. Прямые логины через имя/пароль могут быть заблокированы. Альтернатива — корпоративный SMTP или шлюз почты.
Убедитесь, что на момент логина есть сетевое подключение; если компьютер в момент входа офлайн, письмо не уйдёт.
Если безопасность критична, вместо пароля используйте корпоративный SMTP relay с ограничением по IP.
Что может пойти не так (когда это не сработает)
- Провайдер почты блокирует обычную аутентификацию по паролю.
- Задача настроена запускать от пользователя, который не имеет доступа к зашифрованному файлу с учётными данными.
- На ноутбуке включено требование AC power (и оно не снято).
- На момент входа отсутствует сеть или DNS.
Альтернативные подходы
- Использовать систему логирования событий и внешнюю службу, которая шлёт оповещения по Event ID.
- Отправлять HTTP-запрос на ваш сервер/сервер оповещений (Invoke-RestMethod) вместо SMTP, если так проще интегрироваться.
- Использовать сторонние агенты мониторинга/уведомлений с поддержкой входа пользователя.
План проверки (краткий тест)
- Создать и сохранить зашифрованный файл с учётными данными.
- Настроить задачу с запуском PowerShell и импортом учётных данных.
- Выйти из учётной записи и войти заново.
- Проверить почтовый ящик на получение сообщения.
- Если письма нет — проверить журнал задач и вывод PowerShell (логирование ошибки в файл).
Критерии приёмки
- При входе указанного пользователя приходит e‑mail с заданной темой и телом.
- Скрипт не содержит открытого пароля в аргументах Планировщика задач.
- Файл с учётными данными защищён (Export-Clixml) и доступен только нужной учётной записи.
Краткая справочная таблица
- SMTP-сервер Gmail: smtp.gmail.com
- Рекомендуемый порт: 587 (STARTTLS/TLS)
- Альтернатива порту: 465 (implicit SSL) — зависит от провайдера
- Утилита отправки в PowerShell: Send-MailMessage (в устаревших версиях) или собственная реализация SMTP
Однострочные определения
- Планировщик задач: служба Windows для запуска программ по расписанию или событиям.
- PowerShell: оболочка и язык сценариев для автоматизации Windows.
- SMTP: протокол отправки электронной почты.
- PSCredential: объект PowerShell, содержащий имя пользователя и защищённый пароль.
Итог
Запуск PowerShell из Планировщика задач — простой способ получать уведомления по почте при входе в систему. Главное — правильно хранить и защищать учётные данные и учитывать ограничения почтового провайдера. Если нужна автоматизация на множестве машин или более высокая безопасность, рассмотрите централизованные решения или корпоративный SMTP relay.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента