В этой статье мы рассмотрим, как отправлять сообщения в каналы Teams из PowerShell с помощью вызовов webhook или Microsoft Graph API. С помощью PowerShell вы можете отправлять или читать сообщения в каналах Teams. Это можно использовать в различных сценариях мониторинга и оповещения о событиях определенных команд не через email сообщение (командлет Send-MailMessage), а напрямую в группу Teams.
Отправка сообщения в Teams через WebHook
Вы можете отправить сообщения в канал Microsoft Teams с помощью встроенных коннекторов WebHook. Такой коннектор представляет собой URI адрес, в который можно отправить объект JSON с помощью запроса HTTP POST.
- Создайте в Teams отдельный канал. Можно создать канал с помощью PowerShell модуля Microsoft Teams. Например:
Get-team -DisplayName sysops| New-TeamChannel -DisplayName “AdminAlerts” -MembershipType Private
- Затем откройте клиент Teams (десктопную или веб версию), и выберите опцию Connectors в контекстном меню канала;
- Добавьте коннектор типа Incoming Webhook;
- Укажите имя коннектора;
- Скопируйте URL адрес коннектора, который сгенерирует для вас Azure.
Чтобы отправить простое сообщение в канал по этому 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. В качестве автора сообщения указывается созданный вами коннектор.
Вы можете добавить дополнительные данные в уведомление 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)"}
Get-Team
и
Get-TeamChannel
из модуля MicrosoftTeams.По аналогии с помощью метода GET можно читать сообщения из чата Teams.