创建一个 Windows 服务监控系统开关机并发送企业微信消息

8 篇文章 0 订阅
5 篇文章 0 订阅

本教程将指导您如何使用 Python 创建一个 Windows 服务,该服务可以在系统启动和关机时发送企业微信消息提醒。

1. 环境准备
  1. 安装 Python 和依赖库

    • 确保您已安装 Python(推荐使用 Python 3.7 及以上版本)。
    • 安装 pywin32 库,这是实现 Windows 服务的关键库:
      pip install pywin32
      
  2. 安装 requests 库

    • 用于发送 HTTP 请求:
      pip install requests
      
2. 编写监控脚本

将以下 Python 脚本保存为 check_shutdown.py。此脚本将在系统启动时发送一条消息,并在系统关机时发送另一条消息。

import win32serviceutil
import win32service
import win32event
import servicemanager
import requests
from datetime import datetime


class StartupShutdownMonitorService(win32serviceutil.ServiceFramework):
    _svc_name_ = "开关机监控服务"  # 服务名称
    _svc_display_name_ = "系统开关机监控服务"  # 服务显示名称
    _svc_description_ = "监控系统启动和关机,并发送微信消息。"

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
        self.isrunning = True

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.isrunning = False

    def SvcDoRun(self):
        servicemanager.LogMsg(
            servicemanager.EVENTLOG_INFORMATION_TYPE,
            servicemanager.PYS_SERVICE_STARTED,
            (self._svc_name_, "")
        )
        self.send_startup_message()
        self.main()

    def send_wechat_message(self, message):
        url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WECHAT_KEY'
        data = {
            "msgtype": "text",
            "text": {
                "content": message
            }
        }
        response = requests.post(url, json=data)
        if response.status_code == 200:
            print("消息发送成功")
        else:
            print(f"消息发送失败,状态码: {response.status_code}, 响应: {response.text}")

    def send_startup_message(self):
        # 在服务启动时发送开机消息
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        startup_message = f"{current_time} 电脑已开机"
        self.send_wechat_message(startup_message)

    def main(self):
        # 监控关机
        while self.isrunning:
            rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)
            if rc == win32event.WAIT_OBJECT_0:
                # 系统正在关闭或服务停止,发送关机消息
                current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                shutdown_message = f"{current_time} 电脑正在关机,请查看原因"
                self.send_wechat_message(shutdown_message)
                break


if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(StartupShutdownMonitorService)
3. 取得企业微信推送链接
  1. 创建企业微信机器人

    • 登录企业微信,进入应用管理。
    • 在“我的企业”中找到“机器人管理”。
    • 创建一个新的机器人,获取 Webhook URL。
  2. 替换代码中的 Webhook

    • 将代码中的 YOUR_WECHAT_KEY 替换为您的企业微信机器人的 Webhook key。代码如下:
      url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WECHAT_KEY'
      
4. 安装和运行服务
  1. 以管理员权限运行命令提示符

    • 在“开始”菜单中搜索 cmd,右键点击命令提示符,选择“以管理员身份运行”。
  2. 安装服务

    • 导航到脚本所在目录,然后运行以下命令将脚本安装为 Windows 服务:
      python check_shutdown.py install
      
    • 如果遇到“拒绝访问”的错误,确保您以管理员权限运行命令提示符。
  3. 启动服务

    • 安装完成后,运行以下命令启动服务:
      python check_shutdown.py start
      
5. 验证服务
  1. 检查服务状态

    • 使用 services.msc(Windows 服务管理器)检查 系统开关机监控服务 是否正在运行。
  2. 测试开机和关机消息

    • 重新启动或关机您的计算机,检查是否收到开机和关机消息。
6. 停止和删除服务(如果需要)
  • 停止服务

    python check_shutdown.py stop
    
  • 删除服务

    python check_shutdown.py remove
    

注意事项

  1. 权限问题

    • 安装和管理 Windows 服务需要管理员权限。确保您在执行这些操作时使用了具有管理员权限的命令提示符。
  2. 企业微信推送链接的安全性

    • 在代码中替换 Webhook URL 时,确保 Webhook URL 的安全性,避免泄露您的企业微信机器人链接。

通过以上步骤,您可以创建一个能够在系统启动和关机时自动发送微信消息的 Windows 服务。这样,您可以实时监控计算机的状态变化,并及时收到通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值