ทีม Webhooks ผ่าน PowerShell – การแจ้งเตือนสมัยใหม่
คุณคงคุ้นเคยกับสถานการณ์ต่อไปนี้: การตรวจสอบและการแจ้งเตือนผลลัพธ์มี "การพัฒนาในอดีต" ในอดีต: เครื่องมือตรวจสอบที่แตกต่างกันถูกนำมาใช้สำหรับพื้นที่ที่แตกต่างกัน
แต่เครื่องมือเหล่านี้มีสิ่งหนึ่งที่เหมือนกัน: การแจ้งเตือนทั้งหมดจะถูกส่งทางไปรษณีย์ .
ส่งผลให้มีการสะสมข้อความแจ้งเตือนจำนวนมากจากระบบการตรวจสอบและสคริปต์ต่างๆ นอกเหนือจากคำเชิญนัดหมาย การกระทบยอด และรูปถ่ายของกิจกรรมล่าสุดของทีม< br>
อย่างไรก็ตาม เนื่องจากโครงสร้างพื้นฐานมีการเปลี่ยนแปลงอยู่ตลอดเวลา และความพยายามในการบำรุงรักษาด้วยตนเองสำหรับการแจ้งเตือนเหล่านี้ในระบบการตรวจสอบก็เพิ่มขึ้นในเวลาเดียวกัน จึงมีเพื่อนร่วมงานหนึ่งหรือสองคนที่ลืมปรับการตั้งค่าการแจ้งเตือนตามข้อกำหนดใหม่อยู่เสมอ
มีคนมักได้ยินข้อความเช่น "โอ้ การแจ้งเตือนนี้ไม่สำคัญ มันมาทุกวันอาทิตย์ อย่าสนใจเลย" ทางออกที่ชัดเจนคือการสร้างโฟลเดอร์แยกต่างหากในกล่องจดหมายของคุณ ซึ่งการแจ้งเตือนทั้งหมดจะถูกย้ายโดยอัตโนมัติตามกฎของ Outlook และหายไปในนิพพาน
จริงอยู่ที่: สถานการณ์ที่อธิบายไว้ ณ ที่นี้ค่อนข้างใกล้เคียงกับกรณีที่เลวร้ายที่สุดของการดำเนินการแจ้งเตือน อย่างไรก็ตาม เหตุการณ์ดังกล่าวเกิดขึ้นในลักษณะนี้หรือคล้ายกันในหลายบริษัท
การแจ้งเตือนประเภทนี้ไม่เหมาะสมอีกต่อไป เนื่องจากความต้องการเวลาตอบสนองของแผนกปฏิบัติการที่เพิ่มขึ้นและโครงสร้างพื้นฐานด้านไอทีที่มีการเปลี่ยนแปลงอย่างรวดเร็ว ข้อเท็จจริงเพียงอย่างเดียวว่าการสื่อสารเกี่ยวกับการแจ้งเตือนระหว่างผู้ดูแลระบบมักจะไม่เกิดขึ้นทางไปรษณีย์ แต่ตอนนี้ส่วนใหญ่ผ่านทางทีม (หรือผู้ส่งสารอื่น) ทำให้เกิดข้อสงสัยว่าอีเมลเป็นสื่อที่เหมาะสมสำหรับการแจ้งเตือนหรือไม่
Webhooks คืออะไร?
สิ่งที่เรียกว่า webhooks ช่วยให้สามารถส่งการแจ้งเตือนหรือการแจ้งเตือนอื่นๆ ไปยังช่องทาง Microsoft Teams ที่นี่คุณสามารถสร้างช่องทาง Teams แยกต่างหากสำหรับการตรวจสอบแต่ละแผนกได้ หัวหน้าแผนกมีภาพรวมของการแจ้งเตือนทั้งหมดโดยไม่ต้องกรอกกล่องจดหมายเข้า
คุณสามารถตัดสินใจได้ว่าพื้นที่ใดที่เกี่ยวข้องกับคุณ และกำหนดค่าให้รับการแจ้งเตือนเมื่อมีเหตุการณ์เกิดขึ้น การแจ้งเตือนและการแจ้งเตือนสามารถแสดงความคิดเห็นได้โดยตรง ดังนั้นจึงไม่จำเป็นต้องหยุดพักสื่อในการทำงานร่วมกันระหว่างผู้ดูแลระบบอีกต่อไป ในบทความนี้ คุณจะได้เรียนรู้วิธีสร้างการแจ้งเตือนของทีมเช่นนี้ด้วยโค้ด PowerShell เพียงเล็กน้อย:
ตัวอย่างข้อความแจ้งเตือนที่โพสต์ผ่าน webhook ใน MS Teams
หมายเหตุ: Webhooks ยังถูกใช้นอกทีมด้วย ขณะนี้ Messenger ทั้งหมดรองรับ Webhooks และสามารถจัดการได้ในลักษณะเดียวกัน (อาจมีการเบี่ยงเบนเล็กน้อยในการกำหนดค่า)
ก่อนที่เราจะเข้าสู่การกำหนดค่าของ webhook นั้น ขอทราบคำศัพท์ทั่วไปเกี่ยวกับ webhooks บ้างก่อน: แอปพลิเคชันสามารถนำเสนอสิ่งที่เรียกว่า ขาเข้า (หรือ ขาออก) webhooks ในการดำเนินการนี้ ระบบจะจัดเตรียม URL ที่ไม่ซ้ำกันซึ่งรอรับคำขอเว็บในรูปแบบที่กำหนดไว้ ซึ่งเทียบได้กับ API แอปพลิเคชันและเซิร์ฟเวอร์จึงสามารถแลกเปลี่ยนข้อความโดยใช้ความพยายามในการกำหนดค่าเพียงเล็กน้อย ซึ่งในตอนแรกให้ความเป็นไปได้อย่างมาก ในบทความนี้เราเน้นไปที่ความเป็นไปได้ในการติดตามการแจ้งเตือน
การสร้างทีม Webhooks ด้วย PowerShell
ตอนนี้เรามาดูตัวอย่างเฉพาะของ WebHooks ที่ริเริ่มโดย PowerShell มีให้เลือกมากมาย:
- เมื่อฮาร์ดดิสก์บนเซิร์ฟเวอร์เหลือความจุเพียง 10%
- เมื่อเซิร์ฟเวอร์ไม่ตอบสนองอีกต่อไป
- เมื่อความจุของบัญชี OneDrive ใกล้เต็ม และจำเป็นต้องอัปเกรด
- เมื่อใบอนุญาต M365 ในองค์กรจะถูกใช้จนเต็มจำนวนในอนาคตอันใกล้นี้
- และอื่น ๆ อีกมากมาย
มาดูวิธีใช้ Teams webhooks เพื่อส่งการแจ้งเตือนเมื่อบัญชีผู้ใช้ถูกล็อคใน Active Directory วิธีนี้ทำให้คุณสามารถตอบสนองได้ทันเวลาและสังเกตเห็นการล็อกของผู้ใช้ก่อนที่โปรแกรมของผู้ใช้จะขอการเข้าสู่ระบบใหม่
วิธีการนี้แบ่งออกเป็นสองส่วน: การกำหนดค่าใน Teams และในสคริปต์ PowerShell PowerShell ทำหน้าที่เป็น "กาว" ในสถานการณ์ส่วนใหญ่ซึ่งเชื่อมโยงแอปพลิเคชันต่างๆ
เพื่ออธิบาย: Active Directory ไม่ได้จัดเตรียมความเป็นไปได้ในการส่ง webhooks ทันทีที่ผู้ใช้ถูกล็อค - PowerShell งานนี้จะดำเนินการ
การกำหนดค่าทีม Microsoft
หากต้องการเปิดใช้งาน webhooks จำเป็นต้องกำหนดช่องทางของทีมที่ควรส่งไป จากนั้นคุณสามารถเปิดตัวเชื่อมต่อของช่องได้โดยคลิกขวาที่ช่อง:
การตั้งค่าตัวเชื่อมต่อของช่องทางทีมสามารถพบได้ในเมนูบริบท
การตั้งค่าอินเทอร์เฟซสามารถเปิดใช้งานได้โดยการคลิก "กำหนดค่า" ในแผง "Webhook ขาเข้า":
ภาพรวมของตัวเชื่อมต่อที่มีอยู่ในทีม "การเรียนรู้ไอที"
หลังจากกำหนดชื่อที่เหมาะสมและเลือกอัปโหลดไอคอนได้ ให้คลิก "สร้าง" แล้วคุณจะได้รับ URL ซึ่งเราสามารถส่งคำขอเว็บในสคริปต์ PowerShell ได้:
การกำหนดค่าคุณสมบัติตัวเชื่อมต่อสำหรับ webhook ใหม่
URL นี้จะต้องถูกเก็บไว้อย่างปลอดภัย เนื่องจากเป็น URL สาธารณะ ผู้โจมตีสามารถใช้ URL นี้เพื่อส่งข้อความไปยังช่องทาง Teams ของคุณ - และตามหลักเหตุผลแล้ว คุณควรหลีกเลี่ยงสิ่งนั้น!
หลังจากที่เราคัดลอก URL แล้ว เราก็สามารถเริ่มต้นด้วยสคริปต์ PowerShell ได้แล้ว
สคริปต์ PowerShell
หากต้องการส่ง webhooks ไปยังทีม จะใช้รูปแบบที่เรียกว่า JSON หากคุณไม่ได้ทำงานกับ JSON เป็นประจำ คุณอาจพบว่าการสร้างไฟล์ JSON ยุ่งยากเล็กน้อย
แพลตฟอร์มซอฟต์แวร์ ScriptRunner มีฟังก์ชันสำหรับส่ง webhooks ไปยังทีม ซึ่งช่วยให้คุณไม่ต้องสร้าง JSON เราจะมาดูรายละเอียดเกี่ยวกับคุณลักษณะนี้ในบทความถัดไปในชุดนี้ ในบทนำนี้ ฉันต้องการแสดงให้คุณเห็นข้อมูลพื้นฐานแม้ว่าจะมีทางเลือกอื่นที่เป็นไปได้ก็ตาม คุณสามารถใช้สคีมาต่อไปนี้สำหรับ JSON ของคุณ:
[String]$var = "Text, welcher im Nachrichteninhalt erscheint"
$JSONBody = [PSCustomObject][Ordered]@{
"@type" = "MessageCard"
"@context" = "<http://schema.org/extensions>"
"summary" = "Meine erste Alert-Summary!"
"themeColor" = '0078D7'
"title" = "Mein erster Alert."
"text" = "Hier steht die genaue Alertbeschreibung! Variablen kann man natuerlich auch anfuegen: $var"
}
$TeamMessageBody = ConvertTo-Json $JSONBody
$parameters = @{
"URI" = ''
"Method" = 'POST'
"Body" = $TeamMessageBody
"ContentType" = 'application/json'
}
Invoke-RestMethod @parameters
เราใช้แฮชเทเบิลซึ่งเราเติมเนื้อหาข้อความแล้วแปลงเป็น JSON PowerShell ทำให้งานนี้ค่อนข้างง่ายสำหรับเรา
จากนั้น เมื่อใช้วิธี splatting รายการพารามิเตอร์จะถูกสร้างขึ้น ซึ่งคุณจะต้องเพิ่ม URL ที่เกี่ยวข้องของการกำหนดค่า webhook ของคุณ จากนั้นเราสามารถทดสอบได้โดยตรงว่าการสื่อสารขั้นพื้นฐานใช้งานได้หรือไม่ หากการสื่อสารประสบความสำเร็จ PowerShell จะส่งกลับ "1" และข้อความจะปรากฏใน Teams Channel ของเรา:
ข้อความทดสอบ
ยอดเยี่ยม! ตอนนี้คุณได้ส่ง webhook แรกของคุณไปยัง Teams แล้ว แต่ตอนนี้ฉันสัญญากับคุณว่าจะจัดเตรียมสคริปต์ที่จะแจ้งให้คุณทราบผ่านทาง Teams เมื่อผู้ใช้ถูกล็อคใน AD แน่นอนว่าในการดำเนินการนี้ เราจำเป็นต้องมีขั้นตอนที่จะตรวจจับเมื่อผู้ใช้ถูกล็อคออกจากระบบ
โชคดีที่ Windows EventLog สร้างรายการด้วย EventID 4740 ทันทีที่มีการสร้างผู้ใช้ เราสามารถใช้เหตุการณ์ดังกล่าวเป็นตัวกระตุ้นในการเริ่มสคริปต์ของเราได้ ใช้งานได้ผ่าน Windows Task Scheduler แต่สะดวกกว่ามากผ่านอินเทอร์เฟซ ScriptRunner
ขณะนี้เราได้ดำเนินการสำเร็จแล้วที่ข้อความ "การแจ้งเตือนครั้งแรกของฉัน" จะถูกส่งทันทีที่ผู้ใช้ถูกล็อค ซึ่งข้อความนี้ยังไม่มีประโยชน์มากนัก แน่นอนว่าเรายังต้องปรับบทของเราอยู่ สำหรับสิ่งนี้ เราจำเป็นต้องมีฟังก์ชันในการอ่านผู้ใช้ที่ถูกล็อคและเพิ่มข้อมูลนี้ลงในข้อความ:
# Gets locked AD user, that was locked latest
$LockedUser = Search-ADAccount -LockedOut |
Get-ADUser -Properties badpwdcount, lockoutTime, lockedout, emailaddress |
Select-Object badpwdcount, lockedout, Name, EmailAddress, SamAccountName, @{ Name = "LockoutTime"; Expression = { ([datetime]::FromFileTime($_.lockoutTime).ToLocalTime()) } } |
Sort-Object LockoutTime -Descending |
Select-Object -first 1
$JSONBody = [PSCustomObject][Ordered]@{
"@type" = "MessageCard"
"@context" = "<http://schema.org/extensions>"
"summary" = "Locked: $($LockedUser.SamAccountName)"
"themeColor" = '0078D7'
"title" = "User locked"
"text" = "`nSamAccountName: $($LockedUser.SamAccountName)" +
"`nName: $($LockedUser.Name)" +
"`nMail: $($LockedUser.EmailAddress)" +
"`nBad Password Count: $($LockedUser.badpwdcount)" +
"`nTimestamp: $($LockedUser.LockoutTime.ToString())"
}
$TeamMessageBody = ConvertTo-Json $JSONBody
$parameters = @{
"URI" = ""
"Method" = 'POST'
"Body" = $TeamMessageBody
"ContentType" = 'application/json'
}
Invoke-RestMethod @parameters
ตอนนี้เราได้รับข้อความต่อไปนี้ในทีมพร้อมสิ่งนี้:
สคริปต์ PowerShell โพสต์ข้อมูลที่ร้องขอไปยัง Teams Channel ผ่านทาง webhook สำเร็จแล้ว
บทสรุป
Webhooks เป็นแนวทางที่ล้ำสมัยในการจัดการการแจ้งเตือน ข้อดีมีมากกว่าการแจ้งเตือนทางเมลอย่างชัดเจน แม้ว่าแน่นอนว่าจะมีข้อดีของตัวเองก็ตาม
PowerShell เข้ามามีบทบาทเป็นตัวกลางสำหรับแอปพลิเคชันที่ไม่มีตัวเลือกโดยตรงในการส่งเว็บฮุค ฉันแนะนำให้ใช้ webhooks เท่านั้นและหวังว่าคุณจะสนุกกับการนำไปใช้งาน!
ในส่วนถัดไป (ตอนที่ 2 ตอนที่ 3) ของซีรีส์นี้ คุณจะได้เรียนรู้วิธีเขียนสคริปต์ webhooks ได้ง่ายยิ่งขึ้นโดยใช้ฟังก์ชันที่ ScriptRunner ให้บริการฟรีบน GitHub






