当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 通过 PowerShell 的 Teams Webhooks – 现代警报

作者:精品下载站 日期:2024-12-14 08:11:35 浏览:13 分类:玩电脑

通过 PowerShell 的 Teams Webhooks – 现代警报


[玩转系统] 通过 PowerShell 的 Teams Webhooks – 现代警报

您肯定熟悉以下场景:监控和由此产生的警报在过去已经“历史演变”:不同的区域使用不同的监控工具。
但它们有一个共同点:所有警报都是通过邮件发送。

除了预约邀请、对账和上次团队活动的照片之外,这最终还会积累来自各种监控系统和脚本的大量警报消息。

然而,由于基础设施不断变化,并且监控系统中这些警报的手动维护工作同时也在增加,总是有一两个同事忘记根据新的要求调整警报设置。

人们经常听到这样的说法:“哦,这个警报并不那么重要,它每隔一个星期天就会出现 - 只需忽略它即可”。显而易见的解决方案是在邮箱中创建一个单独的文件夹,所有警报都会根据 Outlook 规则自动移至该文件夹中,从而消失殆尽。

当然:这里描述的场景非常接近警报实现的最坏情况。然而,许多公司都以这种或类似的方式进行

鉴于对运营部门响应时间的要求不断提高以及 IT 基础设施的快速动态变化,这种类型的警报已不再合适。管理员之间有关警报的沟通通常不通过邮件进行,但现在主要通过 Teams(或其他信使)进行,这一事实本身就让人怀疑邮件是否是正确的通知媒介。

什么是 Webhook?

所谓的 webhooks 提供了向 Microsoft Teams 渠道发送警报或其他通知的可能性。在这里您可以创建单独的 Teams 频道来监控每个部门。部门主管可以概览所有通知,而收件箱不会被填满。

您可以决定哪些区域与您相关,并将它们配置为在事件发生时接收通知。警报和通知可以直接评论,因此管理员之间的协作不再需要媒体中断。在本文中,您将了解如何使用少量 PowerShell 代码创建这样的团队警报:

[玩转系统] 通过 PowerShell 的 Teams Webhooks – 现代警报

通过 MS Teams 中的 Webhook 发布警报消息的示例

注意:Webhook 显然也在团队之外使用。所有即时通讯工具现在都支持 Webhook,并且可以以类似的方式进行处理(可能在配置上有微小的偏差)。

在我们开始配置此类 Webhook 之前,先简单介绍一下 Webhook:应用程序可以提供所谓的传入(或传出)Webhook。为此,它提供了一个唯一的 URL,等待接收定义格式的 Web 请求 - 类似于 API。因此,应用程序和服务器可以通过很少的配置工作来交换消息,这最初提供了巨大的可能性。在本文中,我们重点讨论监控警报的可能性。

使用 PowerShell 创建 Team Webhook

那么现在让我们看一下 PowerShell 启动的 WebHooks 的具体示例。有多种选择:

  • 当服务器上的硬盘仅剩 10% 容量时
  • 当服务器不再响应时
  • 当OneDrive账户容量快满,需要升级时
  • 组织中的 M365 许可证在不久的将来何时将达到上限
  • 还有很多

让我们看看当用户帐户在 Active Directory 中锁定时如何使用 Teams Webhooks 发送通知。这样,您甚至可以在用户的程序请求新登录之前及时做出反应并注意到用户的锁定。

该方法分为两部分:Teams 中的配置和 PowerShell 脚本中的配置。 PowerShell 在大多数情况下充当链接不同应用程序的“粘合剂”。

解释一下:Active Directory 本身并不提供在用户锁定后立即发送 Webhooks 的可能性 - 这项工作将由 PowerShell 完成。

配置 Microsoft 团队

要启用 Webhook,需要定义应将其发送到的团队的通道。然后您可以通过右键单击该通道来打开该通道的连接器:

[玩转系统] 通过 PowerShell 的 Teams Webhooks – 现代警报

团队渠道的连接器设置可以在其上下文菜单中找到

然后可以通过单击“传入 Webhook”面板中的“配置”来启动界面设置:

[玩转系统] 通过 PowerShell 的 Teams Webhooks – 现代警报

“学习 IT”团队中可用连接器的概述

指定合适的名称并可选择上传图标后,单击“创建”,您将收到 URL,我们可以通过该 URL 在 PowerShell 脚本中发送 Web 请求:

[玩转系统] 通过 PowerShell 的 Teams Webhooks – 现代警报

为新的 webhook 配置连接器属性

该 URL 必须保持安全,因为它当然是公开的。攻击者可以使用此 URL 向您的 Teams 频道发送消息 - 从逻辑上讲,您应该避免这种情况!

复制 URL 后,我们现在可以开始使用 PowerShell 脚本。

PowerShell脚本

为了将 webhook 发送给团队,使用了所谓的 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 方法创建一个参数列表,您必须在其中添加 webhook 配置的相应 URL。然后我们就可以直接测试基本通讯是否有效。如果通信成功,PowerShell 将返回“1”,并且该消息将显示在我们的 Teams 频道中:

[玩转系统] 通过 PowerShell 的 Teams Webhooks – 现代警报

测试消息

伟大的!您现在已将第一个 Webhook 发送到 Teams。但现在我向您承诺提供一个脚本,当用户被锁定在 AD 中时,该脚本将通过 Teams 通知您。当然,为此,我们需要一个程序来检测用户何时被锁定。

幸运的是,一旦创建用户,Windows 事件日志就会创建一个带有 EventID 4740 的条目。我们可以使用这样的事件作为触发器来启动我们的脚本。这可以通过 Windows 任务计划程序实现,但通过 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 Webhooks – 现代警报

PowerShell 脚本已成功通过 Webhook 将请求的信息发布到 Teams 频道。

结论

Webhook 是一种最先进的警报管理方法。其优点明显胜过邮件警报,尽管它们当然也有其优点。

对于没有直接选项发送 Webhooks 的应用程序,PowerShell 接管中介者的角色。我只能推荐使用 webhooks 并祝您在实施过程中获得很多乐趣!

在本系列的下一部分(第 2 部分、第 3 部分)中,您将学习如何使用 ScriptRunner 在 GitHub 上免费提供的功能更轻松地编写 Webhooks 脚本。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯