Categories: PowerShellTeams

Отправка сообщений в канал 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 в контекстном меню канала;
  3. Добавьте коннектор типа Incoming Webhook ;
  4. Укажите имя коннектора;
  5. Скопируйте URL адрес коннектора, который сгенерирует для вас Azure.

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

$myTeamsWebHook = “https://remontka.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. В качестве автора сообщения указывается созданный вами коннектор.

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 с помощью 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.

admin

Share
Published by
admin

Recent Posts

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

7 дней ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

3 недели ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

3 недели ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

3 недели ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

3 недели ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

3 недели ago