Вы можете отправлять сообщения в каналы Teams из PowerShell с помощью веб-перехватчиков или вызовов API Microsoft Graph. Давайте посмотрим, как отправлять и читать сообщения в каналах Microsoft Teams с помощью PowerShell. Вы можете использовать эти сценарии PS в различных сценариях мониторинга или уведомлений, где вам нужно отправить уведомление не по электронной почте (Командлет Send-MailMessage), а непосредственно в канал Teams.
Содержание:
- Отправка сообщений в Microsoft Teams с помощью WebHook
- Как отправить или прочитать сообщение Teams с помощью Microsoft Graph API?
Отправка сообщений в Microsoft Teams с помощью WebHook
Вы можете отправлять сообщения в канал Microsoft Teams с помощью встроенных соединителей WebHook. Коннектор веб-перехватчика — это URL-адрес, по которому вы можете отправить объект JSON с помощью HTTP-запроса POST.
- Создайте канал в Teams. Ты можешь это сделать с помощью модуля Microsoft Teams PowerShell. Например:
Get-team -DisplayName sysops| New-TeamChannel -DisplayName "AdminAlerts" -MembershipType Private
- Затем откройте клиент Teams (настольную или веб-версию) и выберите Соединители в контекстном меню канала;
- Добавить Входящий веб-перехватчик тип разъема;
- Укажите имя коннектора;
- Скопируйте URL-адрес соединителя, созданного для вас Azure.
Чтобы отправить простое сообщение на канал с использованием этого URL-адреса, выполните следующие команды PowerShell:
$myTeamsWebHook = “https://woshub.webhook.office.com/webhookb2/[email protected]/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. Созданный вами коннектор отображается как автор сообщения.
MS Teams позволяет отправлять не более 4 сообщений в секунду.
Вы можете добавить другие данные в уведомление Teams, изменить шрифт, цвет и добавить дополнительную информацию из сценария PowerShell.
Например, следующий скрипт отслеживает события блокировки пользователя (событие 4740) на контроллере домена с PDC Роль FSMO и отправляет уведомление в канал 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 = "4434ad23-b212-3212-3aad-54321de3bbc"
$TenatDomainName = "26216542-aaaa-bbbb-2212-65566aa6c32"
$AccessSecret="12-32Bh654321d3-seLa23l33p.hhj33MM21aaf"
$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.
Точно так же вы можете читать сообщения из чата Teams, используя метод GET.