PowerShell: надсилання повідомлень у Telegram.

Мессенджер 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"
$tg_chat_id="987654321"
Для підключення до API Telegram обов'язково потрібно використовувати протокол TLS 1.2. Переконайтеся, що TLS 1.2 включений в вашій операційній системі Windows. PowerShell за замовчуванням може використовувати застарілі протоколи SSL 3.0, TLS 1.0 або TLS 1.1 для підключення. Щоб використовувати TLS 1.2 в поточній сесії, виконайте команду:

[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, необхідно:
  1. Додати бота в адміни чату/каналу.
  2. Запустити бота @RawDataBot і переслати йому будь-яке повідомлення з чату або каналу.
  3. Він поверне 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.ps1
3. Як можна додати виконання ps скрипта в план бекапів mssql?

  1. Створити в Management Studio нову SQL job типу «PowerShell job step», вказавши шлях до скрипту або запустивши функцію прямо звідси.
  2. Додати в план резервного копіювання останнє завдання «Execute SQL Server Agent Job Task» та вибрати вашу задачу. 
 Скрипти виконуються від SQL Server Agent.

Отправить комментарий

Добавлять новые комментарии запрещено.*

Новые Старые