Мессенджер Telegram можна використовувати як засіб миттєвого повідомлення про різноманітні події в інфраструктурі, результати виконання скриптів або завдань планувальника. У цій статті ми покажемо, як відправити текстове повідомлення в канал або групу Telegram за допомогою PowerShell через API бота.
Спочатку потрібно створити нового бота в Telegram за допомогою @BotFather. Знайдіть цього бота в клієнті Telegram і надішліть йому команди:
- /start
- /newbot
Вкажіть назву бота та ім'я користувача. BotFather згенерує для вас HTTP токен, який потрібно скопіювати та зберегти.
Для відправки повідомлення в чат Telegram або конкретному користувачу потрібно отримати його ідентифікатор. У даному випадку я буду надсилати повідомлення собі, тому за допомогою @my_id_bot я отримаю свій ID:
- /start
Your user ID: 987654321
Для відправки повідомлення в Telegram потрібно вказати токен бота та ім'я вашого користувача (групи):
$tg_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Для підключення до API Telegram обов'язково потрібно використовувати протокол TLS 1.2. Переконайтеся, що TLS 1.2 включений в вашій операційній системі Windows. PowerShell за замовчуванням може використовувати застарілі протоколи SSL 3.0, TLS 1.0 або TLS 1.1 для підключення. Щоб використовувати TLS 1.2 в поточній сесії, виконайте команду:
$tg_chat_id="987654321"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12Щоб надіслати повідомлення в Telegram, виконайте команду:
$message="Тестовое сообщение в Telegram из PowerShell"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($Telegramtoken)/sendMessage?chat_id=$($Telegramchatid)&text=$($Message)"
Ви повинні отримати повідомлення від бота.
Щоб зробити повідомлення більш наочними та кольоровими, можна використовувати символи emoji та форматування HTML:
$message= $currend_data + "⚠️ Скрипт оновлення <b>Update1C</b> завершено з помилками"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($tg_token)/sendMessage?chat_id=$($tg_chat_id)&text=$($Message)&parse_mode=html"
Варто використовувати редактор VS Code для роботи зі скриптами PowerShell.
Якщо в вашій мережі доступ до Інтернету здійснюється через проксі-сервер, ви можете вказати його за допомогою параметра -Proxy командлета Invoke-WebRequest. Для аутентифікації на проксі можна використовувати аргумент -ProxyCredential.
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($Telegramtoken)/sendMessage?chat_id=$($Telegramchatid)&text=$($Message)" –Proxy "http://192.168.31.55:3128"
У PowerShell 7.x командлет Invoke-WebRequest використовує налаштування проксі, вказані в змінних середовища. Детальніше про використання проксі в PowerShell можна дізнатися в документації.
Скрипт надсилання повідомлення в Telegram можна оформити у вигляді функції та додати її до файлу профілю PowerShell в Windows:
function Send-Telegram {
[CmdletBinding()]
param(
[Parameter()]
[string] $Message
)
$tg_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$tg_chat_id="987654321"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($tg_token)/sendMessage?chat_id=$($tg_chat_id)&text=$($Message)&parse_mode=html"
return $Response
}
Щоб відкрити текстовий файл з профілем PowerShell, який автоматично застосовується при запуску процесу powershell.exe/pwsh.exe, виконайте наступну команду:
notepad $PSHOME\Profile.ps1
Тепер ви можете використовувати функцію надсилання повідомлення в канал Telegram з будь-якого скрипта PowerShell. Для цього достатньо виконати наступну команду:
Send-Telegram "My test message"
Якщо ви використовуєте Teams як основний месенджер, ви також можете відправляти повідомлення в канал Teams за допомогою PowerShell.
Важливі аспекти.
1. Для відправки повідомлень в канал за допомогою PowerShell, необхідно:- Додати бота в адміни чату/каналу.
- Запустити бота @RawDataBot і переслати йому будь-яке повідомлення з чату або каналу.
- Він поверне JSON-код повідомлення, в якому необхідно скопіювати ID чату.
2. Якщо в ОС Windows потрібно включати виконання скриптів, наприклад, з планувальника завдань, то скрипт *.ps1 не буде виконуватись. Для цього необхідно налаштувати політику виконання PowerShell (PowerShell Execution Policy), щоб виконання скриптів було дозволено.
Це можна зробити, використовуючи параметр -ExecutionPolicy Bypass при виконанні скрипту PowerShell:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -Noninteractive -ExecutionPolicy Bypass –Noprofile -file c:\path\PSScript.ps13. Як можна додати виконання ps скрипта в план бекапів mssql?
- Створити в Management Studio нову SQL job типу «PowerShell job step», вказавши шлях до скрипту або запустивши функцію прямо звідси.
- Додати в план резервного копіювання останнє завдання «Execute SQL Server Agent Job Task» та вибрати вашу задачу.