ค้นหาเว็บไซต์

วิธีส่งข้อความไปยัง Teams Channel ด้วย PowerShell


คุณสามารถส่งข้อความไปยังแชนเนล Teams จาก PowerShell โดยใช้เว็บฮุคหรือการเรียก Microsoft Graph API มาดูวิธีส่งและอ่านข้อความในแชนเนล Microsoft Teams โดยใช้ PowerShell คุณสามารถใช้สคริปต์ PS เหล่านี้ในสถานการณ์การตรวจสอบหรือการแจ้งเตือนต่างๆ ที่คุณจำเป็นต้องส่งการแจ้งเตือนโดยไม่ผ่านทางอีเมล (Send-MailMessage cmdlet) แต่ส่งโดยตรงไปยังแชนเนล Teams

ส่งข้อความไปยัง Microsoft Teams โดยใช้ WebHook

คุณสามารถส่งข้อความไปยังช่องทาง Microsoft Teams โดยใช้ตัวเชื่อมต่อ WebHook ในตัว ตัวเชื่อมต่อเว็บฮุคคือที่อยู่ URL ที่คุณสามารถส่งวัตถุ JSON โดยใช้คำขอ HTTP POST

  1. สร้างแชนเนลใน Teams คุณสามารถทำได้โดยใช้โมดูล Microsoft Teams PowerShell ตัวอย่างเช่น:

    Get-team -DisplayName sysops| New-TeamChannel -DisplayName "AdminAlerts" -MembershipType Private
  2. จากนั้นเปิดไคลเอนต์ Teams (เวอร์ชันเดสก์ท็อปหรือเว็บ) แล้วเลือก ตัวเชื่อมต่อ ในเมนูบริบทของแชนเนล

  3. เพิ่มประเภทตัวเชื่อมต่อ เว็บฮุคขาเข้า

  4. ระบุชื่อตัวเชื่อมต่อ

  5. คัดลอก URL ของตัวเชื่อมต่อที่ Azure สร้างขึ้นสำหรับคุณ

หากต้องการส่งข้อความอย่างง่ายไปยังแชนเนลโดยใช้ URL นี้ ให้รันคำสั่ง PowerShell ต่อไปนี้:

$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

ตรวจสอบให้แน่ใจว่าข้อความของคุณปรากฏในแชนเนล 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 และผู้ดูแลระบบสามารถตอบสนองได้

คุณสามารถผูกสคริปต์กับ EventID 4740 ใน Event Viewer (คุณสามารถแนบงานกับเหตุการณ์) หรือคุณสามารถสร้างงานใน Task Scheduler และเรียกใช้สคริปต์ PowerShell เป็นประจำ

จะส่งหรืออ่านข้อความของทีมด้วย 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

บทความที่เกี่ยวข้อง