PowerShell ile Teams Kanalına Mesaj Gönderme


Webhook veya Microsoft Graph API çağrılarını kullanarak PowerShell'den Teams kanallarına mesaj gönderebilirsiniz. PowerShell kullanarak Microsoft Teams kanallarında nasıl mesaj gönderileceğini ve okunacağını görelim. Bu PS betiklerini, e-posta (Send-MailMessage cmdlet) aracılığıyla değil, doğrudan bir Teams kanalına bildirim göndermeniz gereken çeşitli izleme veya bildirim senaryolarında kullanabilirsiniz.

WebHook Kullanarak Microsoft Teams'e İleti Gönderme

Yerleşik WebHook bağlayıcılarını kullanarak bir Microsoft Teams kanalına ileti gönderebilirsiniz. Webhook bağlayıcı, HTTP POST isteği kullanarak bir JSON nesnesi gönderebileceğiniz bir URL adresidir.

  1. Ekiplerde bir kanal oluşturun. Microsoft Teams PowerShell modülünü kullanarak yapabilirsiniz. Örneğin:

    Get-team -DisplayName sysops| New-TeamChannel -DisplayName "AdminAlerts" -MembershipType Private
  2. Ardından Teams istemcisini (masaüstü veya web sürümü) açın ve kanalın içerik menüsünden Bağlayıcılar'ı seçin;

  3. Gelen Webhook tipinde bağlayıcı ekleyin;

  4. Bağlayıcı adını belirtin;

  5. Azure'un sizin için oluşturduğu bağlayıcının URL'sini kopyalayın.

Bu URL'yi kullanarak kanala basit bir mesaj göndermek için aşağıdaki PowerShell komutlarını çalıştırın:

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

Mesajınızın Teams kanalında göründüğünden emin olun. Oluşturduğunuz bağlayıcı, mesajın yazarı olarak görüntülenir.

MS Teams, saniyede en fazla 4 mesaj göndermenize izin verir.

Teams bildiriminize başka veriler ekleyebilir, yazı tipini, rengi değiştirebilir ve PowerShell betiğinizden ekstra bilgiler ekleyebilirsiniz.

Örneğin, aşağıdaki komut dosyası, PDC FSMO rolüne sahip bir etki alanı denetleyicisindeki kullanıcı kilitleme olaylarını (Olay 4740) izler ve Teams kanalına bir bildirim gönderir.

$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

Ardından etkinlik Teams kanalında görünür ve bir yönetici buna tepki verebilir.

Olay Görüntüleyici'de komut dosyasını EventID 4740'a bağlayabilirsiniz (bir olaya görev ekleyebilirsiniz). Veya Görev Zamanlayıcı'da bir iş oluşturabilir ve PowerShell betiğini düzenli olarak çalıştırabilirsiniz.

Microsoft Graph API ile Ekip Mesajı Nasıl Gönderilir veya Okunur?

Microsoft Graph API kullanarak Teams kanalında hem mesaj gönderebilir hem de okuyabilirsiniz. İlk olarak, Azure uygulamasını kaydetmeniz, izinleri ayarlamanız (

Group.Read.All

,

ChannelMessage.Send

,

Chat.ReadWrite

, Ve

ChatMessage.Send

) ve bir kimlik doğrulama belirteci edinin (PowerShell kullanarak Azure Microsoft Graph API'ye Bağlanma makalesinde daha fazla bilgi edinin).

$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)"}

Alabilirsiniz

$TeamID

Ve

$ChannelID

kullanarak

Get-Team

Ve

Get-TeamChannel

MicrosoftTeams modülünden.

Aynı şekilde, GET yöntemini kullanarak Teams sohbetindeki mesajları da okuyabilirsiniz.

İlgili makaleler