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.Read、ChatMessage.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 技术干货!

浙公网安备 33010602011771号