Отправка сообщений в канал Teams с помощью PowerShell

В этой статье мы рассмотрим, как отправлять сообщения в каналы Teams из PowerShell с помощью вызовов webhook или Microsoft Graph API. С помощью PowerShell вы можете отправлять или читать сообщения в каналах Teams. Это можно использовать в различных сценариях мониторинга и оповещения о событиях определенных команд не через email сообщение (командлет Send-MailMessage), а напрямую в группу Teams.


Отправка сообщения в Teams через WebHook

Вы можете отправить сообщения в канал Microsoft Teams с помощью встроенных коннекторов WebHook. Такой коннектор представляет собой URI адрес, в который можно отправить объект JSON с помощью запроса HTTP POST.

  1. Создайте в Teams отдельный канал. Можно создать канал с помощью PowerShell модуля Microsoft Teams. Например: Get-team -DisplayName sysops| New-TeamChannel -DisplayName “AdminAlerts” -MembershipType Private
  2. Затем откройте клиент Teams (десктопную или веб версию), и выберите опцию Connectors в контекстном меню канала; Настройка Connectors в Teams
  3. Добавьте коннектор типа Incoming Webhook; Добавить webhook в teams
  4. Укажите имя коннектора;
  5. Скопируйте URL адрес коннектора, который сгенерирует для вас Azure.

получить url адрес webhook в teams

Чтобы отправить простое сообщение в канал по этому URL, выполните такие команды PowerShell:

$myTeamsWebHook = “https://winitpro.webhook.office.com/webhookb2/123456-12312-@aaaaa-bbbb-cccc/IncomingWebhook/xxxxxxxxxxxxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx”
Invoke-RestMethod -Method post -ContentType 'Application/Json' -Body '{"text":"Test Teams!"}' -Uri $myTeamsWebHook

Убедитесь, то ваше сообщение появилось в канале Teams. В качестве автора сообщения указывается созданный вами коннектор.

powershell отправить сообщение в канал teams

Teams позволяет отправлять не более 4 запросов в секунду.

Вы можете добавить дополнительные данные в уведомление Teams, изменить шрифт, цвет, добавить дополнительную информацию из вашего скрипта PowerShell.

Например, следующий скрипт отслеживает появление события блокировки пользователя (EventID 4740) на контроллере домена с FSMO ролью PDC и отправляет уведомление в канал Teams.

$LockedUser = Search-ADAccount -UsersOnly –LockedOut | Get-ADUser –Properties lockoutTime, emailaddress | Select-Object emailaddress, @{n='lockoutTime';e={[DateTime]::FromFileTime($_.lockoutTime)}} | Sort-Object LockoutTime -Descending | Select-Object -first 1
$myTeamsWebHook  = "YOUR-WEBHOOK-URL"
$webhookMessage = [PSCustomObject][Ordered]@{
"@type"      = "FF0000"
"@context"   = "http://schema.org/extensions"
"summary"    = "Locked User: $($LockedUser.SamAccountName) "
"themeColor" = '700015'
"title"      = "User Lockout Event"
"text" = "`n
SamAccountName: $($LockedUser.SamAccountName)
Mail: $($LockedUser.EmailAddress)
Timestamp: $($LockedUser.LockoutTime.ToString()) "
}
$webhookJSON = convertto-json $webhookMessage -Depth 50
$webhookCall = @{
"URI"         = $myTeamsWebHook
"Method"      = 'POST'
"Body"        = $webhookJSON
"ContentType" = 'application/json'
}
Invoke-RestMethod @webhookCall

В результате такое событие попадает в канал Teams и на него может отреагировать администратор. отправка уведомления о блокировке пользователя в канал Teams

Отправить или прочитать сообщение в Teams с помощью Microsoft Graph API

С помощью Microsoft Graph API вы можете не только отправлять, но и читать сообщения из канала Teams. Для этого вам нужно зарегистрировать приложение Azure, настроить разрешения (Group.Read.All, ChannelMessage.Send, Chat.ReadWrite и ChatMessage.Send) и получить токен аутентификации (подробнее об этом в статье Доступ к Azure через Microsoft Graph API с помощью PowerShell).

$ApplicationID = "46692ad-f8a0-123f-8cca-432102de3bcf"
$TenatDomainName = "26216542-465a-407e-a17d-2bb4c3e3313b"
$AccessSecret = "d-8jM3ZUG87du-syZd32k01q.gkssa3mH3v"
$Body = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
client_Id = $ApplicationID
Client_Secret = $AccessSecret
}
$ConnectGraph = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token -Method POST -Body $Body
$token = $ConnectGraph.access_token
$URLchatmessage="https://graph.microsoft.com/v1.0/teams/$TeamID/channels/$ChannelID/messages"
$BodyJsonTeam = @"

{
"body": {
"content": "Hello World"
}
}
"@
Invoke-RestMethod -Method POST -Uri $URLchatmessage -Body $BodyJsonTeam -Headers -Headers @{Authorization = "Bearer $($token)"}

$TeamID и $ChannelID можно получить с помощью Get-Team и Get-TeamChannel из модуля MicrosoftTeams.

По аналогии с помощью метода GET можно читать сообщения из чата Teams.


Предыдущая статья Следующая статья


Комментариев: 5 Оставить комментарий

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)