CLI for Microsoft 365 实战:用命令行操控 Teams 收发消息

CLI for Microsoft 365 实战:用命令行操控 Teams 收发消息

每天在 Teams 里复制粘贴发消息,能不能直接在终端里搞定?

CLI for Microsoft 365(前身是 Office 365 CLI)是 PnP 社区维护的开源命令行工具,覆盖了 Microsoft 365 全家桶的管理操作。其中 Teams 相关的命令可以让你在终端里完成聊天消息的发送、读取、搜索,不需要打开 Teams 客户端。

本文从零开始,记录安装、登录、发消息、读消息的完整流程。

安装与登录

安装 CLI

要求 Node.js 18+,全局安装即可:

npm install -g @pnp/cli-microsoft365

验证安装:

m365 version

登录 Microsoft 365

CLI 支持多种登录方式。最简单的是浏览器交互登录:

m365 login

执行后会弹开浏览器,用你的 Microsoft 365 账号登录授权。登录成功后终端会显示确认信息。

如果是在 CI/CD 环境中运行,可以使用设备码登录:

m365 login --authType deviceCode

或者用用户名密码(不推荐在生产环境使用):

m365 login --authType password --userName user@contoso.com

发送消息

CLI for Microsoft 365 提供了两种发送 Teams 消息的方式:聊天消息(1:1 或群聊)和频道消息(Team Channel)。

方式一:向个人或群聊发消息

使用 teams chat message send 命令。这个命令支持三种定位聊天会话的方式:

按邮箱发给个人(最简单,不需要知道 Chat ID):

m365 teams chat message send \
  --userEmails alexw@contoso.com \
  --message "你好,这条消息来自终端"

如果和对方之间还没有聊天会话,CLI 会自动创建一个新的。

按邮箱发给多人群聊

m365 teams chat message send \
  --userEmails alexw@contoso.com,meganb@contoso.com \
  --message "团队会议提醒:今天下午 3 点"

按 Chat ID 发送(适合已知会话 ID 的场景):

m365 teams chat message send \
  --chatId 19:2da4c29f6d7041eca70b638b43d45437@thread.v2 \
  --message "部署已完成"

按聊天名称发送

m365 teams chat message send \
  --chatName "项目讨论组" \
  --message "本周进度已更新"

发送 HTML 格式消息:

m365 teams chat message send \
  --userEmails alexw@contoso.com \
  --message "<b>重要通知</b>:<br/>服务器将于今晚 22:00 维护" \
  --contentType html

方式二:向 Team 频道发消息

向 Team 的 Channel 发消息需要用到 teams message send 命令(注意没有 chat 关键字):

m365 teams message send \
  --teamId 5f5d7b71-1161-44d8-bcc1-3da710eb4171 \
  --channelId 19:88f7e66a8dfe42be92db19505ae912a8@thread.skype \
  --message "构建已通过,版本号 v2.1.0"

如果不知道 Team ID 和 Channel ID,可以先查询:

# 列出所有 Team
m365 teams team list

# 列出某个 Team 的所有 Channel
m365 teams channel list --teamId 5f5d7b71-1161-44d8-bcc1-3da710eb4171

接收/读取消息

列出所有聊天会话

先看看你有哪些活跃的聊天:

m365 teams chat list

可以按类型过滤:

# 只看一对一聊天
m365 teams chat list --type oneOnOne

# 只看群聊
m365 teams chat list --type group

读取聊天消息

拿到 Chat ID 后,列出聊天中的消息:

m365 teams chat message list \
  --chatId 19:2da4c29f6d7041eca70b638b43d45437@thread.v2

按时间范围过滤消息:

# 读取 2026 年 5 月 1 日之后创建的消息
m365 teams chat message list \
  --chatId 19:2da4c29f6d7041eca70b638b43d45437@thread.v2 \
  --createdEndDateTime 2026-05-01T00:00:00Z

# 读取某个时间段内修改过的消息
m365 teams chat message list \
  --chatId 19:2da4c29f6d7041eca70b638b43d45437@thread.v2 \
  --modifiedStartDateTime 2026-05-01T00:00:00Z \
  --modifiedEndDateTime 2026-05-21T00:00:00Z

返回的消息数据结构如下:

{
  "id": "1667653590582",
  "createdDateTime": "2026-05-21T13:06:30.582Z",
  "from": {
    "user": {
      "displayName": "张三",
      "userIdentityType": "aadUser"
    }
  },
  "body": {
    "contentType": "html",
    "content": "<p>你好</p>"
  }
}

读取频道消息

# 列出频道消息
m365 teams message list \
  --teamId 5f5d7b71-1161-44d8-bcc1-3da710eb4171 \
  --channelId 19:88f7e66a8dfe42be92db19505ae912a8@thread.skype

# 读取单条消息
m365 teams message get \
  --teamId 5f5d7b71-1161-44d8-bcc1-3da710eb4171 \
  --channelId 19:88f7e66a8dfe42be92db19505ae912a8@thread.skype \
  --id 1540747442203

# 读取消息的回复
m365 teams message reply list \
  --teamId 5f5d7b71-1161-44d8-bcc1-3da710eb4171 \
  --channelId 19:88f7e66a8dfe42be92db19505ae912a8@thread.skype \
  --messageId 1540747442203

完整操作流程图

MERMAID_BLOCK_0

实战场景:用 JMESPath 提取关键信息

CLI 默认返回完整 JSON,配合 --query 参数可以用 JMESPath 提取你需要的字段。

只看消息内容和发送者:

m365 teams chat message list \
  --chatId 19:2da4c29f6d7041eca70b638b43d45437@thread.v2 \
  --query "[].{from: from.user.displayName, body: body.content, time: createdDateTime}" \
  --output table

只看某个人的消息:

m365 teams chat message list \
  --chatId 19:2da4c29f6d7041eca70b638b43d45437@thread.v2 \
  --query "[?from.user.displayName == '张三'].body.content"

导出为 CSV 格式:

m365 teams chat message list \
  --chatId 19:2da4c29f6d7041eca70b638b43d45437@thread.v2 \
  --output csv > messages.csv

权限说明

这些 Teams 命令需要以下 Microsoft Graph 权限:

操作 需要的权限
发送聊天消息 Chat.ReadChatMessage.Send
读取聊天消息 ChatMessage.Read
读取频道消息 ChannelMessage.Read.All

CLI 默认使用 Delegated 权限(即当前登录用户的权限上下文)。teams chat message send 不支持 Application 权限,这意味着你不能用一个后台服务账号来发消息,必须用真实用户登录。

适合自动化的场景

这些命令真正发挥价值的地方是自动化场景:

CI/CD 通知:构建完成后自动在 Teams 频道发通知

m365 teams message send \
  --teamId $TEAM_ID \
  --channelId $CHANNEL_ID \
  --message "✅ $REPO 构建成功,分支 $BRANCH,提交者 $AUTHOR"

定时巡检报告:每天早上把系统状态推到运维群

m365 teams chat message send \
  --chatName "运维告警群" \
  --message " 今日系统状态:$STATUS" \
  --contentType html

消息归档:定期导出群聊记录做备份

m365 teams chat message list \
  --chatId $CHAT_ID \
  --createdEndDateTime $(date -u +%Y-%m-01T00:00:00Z) \
  --output json > archive.json

CLI for Microsoft 365 还支持 Docker 运行和 GitHub Actions 集成,可以把这些命令直接嵌入到你的自动化流程中。


作者: itech001
来源: 公众号:AI人工智能时代
网站: https://www.theaiera.cn/
每日分享最前沿的AI新闻资讯和技术研究。

关注公众号,获取更多 AI 技术干货!

posted @ 2026-05-21 21:28  iTech  阅读(0)  评论(0)    收藏  举报