¿Cómo enviar un mensaje al canal de Teams con PowerShell?

Puede enviar mensajes a los canales de Teams desde PowerShell mediante webhook o llamadas a la API de Microsoft Graph. Veamos cómo enviar y leer mensajes en los canales de Microsoft Teams usando PowerShell. Puede usar estos scripts de PS en varios escenarios de supervisión o notificación en los que necesita enviar una notificación no por correo electrónico (cmdlet Send-MailMessage), sino directamente a un canal de Teams.

Contenido:

  • Enviar mensajes a los equipos de Microsoft mediante WebHook
  • ¿Cómo enviar o leer un mensaje de Teams con Microsoft Graph API?

Enviar mensajes a los equipos de Microsoft mediante WebHook

Puede enviar mensajes a un canal de Microsoft Teams mediante los conectores WebHook integrados. Un conector de webhook es una dirección URL a la que puede enviar un objeto JSON mediante una solicitud HTTP POST.

  1. Cree un canal en Teams. Puede hacerlo utilizando el módulo PowerShell de Microsoft Teams. Por ejemplo: Get-team -DisplayName sysops| New-TeamChannel -DisplayName "AdminAlerts" -MembershipType Private
  2. A continuación, abra el cliente de Teams (una versión web o de escritorio) y seleccione Conectores en el menú contextual del canal; agregar conector en el cliente de Microsoft Teams
  3. Añade el Webhook entrante tipo de conector;equipos - agregando conector de webhook
  4. Especifique el nombre del conector;
  5. Copie la dirección URL del conector que Azure creó para usted.

copiar la URL del conector del webhook

Para enviar un mensaje simple al canal usando esta URL, ejecute los siguientes comandos de PowerShell:

$myTeamsWebHook = “https://woshub.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

Asegúrese de que su mensaje apareció en el canal de Teams. El conector que ha creado se muestra como el autor del mensaje.

enviar mensaje al canal de equipos con powershell y webhook

MS Teams le permite enviar no más de 4 mensajes por segundo.

Puede agregar otros datos a su notificación de Teams, cambiar la fuente, el color y agregar información adicional desde su secuencia de comandos de PowerShell.

Por ejemplo, la siguiente secuencia de comandos supervisa los eventos de bloqueo del usuario (Evento 4740) en un controlador de dominio con la función PDC FSMO y envía una notificación al canal de 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

Luego, el evento aparece en el canal de Teams y un administrador puede reaccionar ante él. enviar mensajes de texto enriquecidos a equipos con powershell

¿Cómo enviar o leer un mensaje de Teams con Microsoft Graph API?

Con la API de Microsoft Graph, puede enviar y leer mensajes en el canal de Teams. Primero, debe registrar la aplicación Azure, establecer permisos (Group.Read.All, ChannelMessage.Send, Chat.ReadWritey ChatMessage.Send) y obtenga un token de autenticación (obtenga más información en el artículo Cómo conectar Azure Microsoft Graph API mediante 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)"}

Puedes obtener $TeamID y $ChannelID usando Get-Team y Get-TeamChannel desde el módulo MicrosoftTeams.

De la misma forma, puedes leer mensajes de un chat de Teams usando el método GET.

Artículos Interesantes