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

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago