为什么Remote PowerShell正在被淘汰:理解Exchange V3模块的REST API连接迁移(office-docs-powershell)
为什么Remote PowerShell正在被淘汰:理解Exchange V3模块的REST API连接迁移(office-docs-powershell)
【免费下载链接】office-docs-powershellPowerShell Reference for Office Products - Short URL: aka.ms/office-powershell项目地址: https://gitcode.com/gh_mirrors/of/office-docs-powershell
本文基于官方文档库 office-docs-powershell(Office PowerShell Reference),帮助你彻底理解Remote PowerShell 连接方式正在被淘汰的原因,以及 Exchange Online PowerShell 如何通过Exchange Online PowerShell V3 模块(EXO V3 模块)迁移到REST API 连接。无论你是 Exchange 管理员还是运维脚本开发者,这条迁移路线都直接决定你的脚本还能不能跑、连接还安不安全。只需 5 分钟,带你完成从原理到实操的完整理解。
为什么 Remote PowerShell 正在被淘汰?
过去连接 Exchange Online PowerShell,标准姿势是通过 WinRM 建立一条远程 PowerShell 会话。这套老方案有三个绕不开的短板:
| 短板 | 具体表现 |
|---|---|
| 🔒 安全性差 | 依赖客户端 WinRM 开启 Basic 认证头来传输 OAuth 令牌,属于最弱的连接方式 |
| 🐢 性能低 | 每次连接都要在客户端搭建 PowerShell runspace(运行空间),开销大、启动慢 |
| ⚡ 可靠性弱 | 网络抖动、大查询耗时长时容易失败,没有内置重试机制 |
正因如此,微软先后发布了弃用公告:Exchange Online PowerShell 的 Remote PowerShell(RPS)协议于 2022 年 12 月宣布结束支持,Security & Compliance PowerShell 的 RPS 协议于 2023 年 5 月跟进公告。换句话说,Basic 认证(远程 PowerShell)连接已经成为历史,官方文档中相关章节也只保留作历史参考。
REST API 连接:安全、可靠、性能的三维升级
EXO V3 模块(3.0.0 及更高版本)带来了根本性改变:所有 cmdlet 都改由 REST API 直接驱动,不再建立远程 PowerShell 会话。官方对三种连接方式的对比如下:
| 维度 | Remote PowerShell cmdlets | Get-EXO* cmdlets | REST API cmdlets |
|---|---|---|---|
| 安全性 | 最弱 | 高 | 高 |
| 性能 | 低 | 高 | 中 |
| 可靠性 | 最弱 | 高 | 高 |
| 功能完整度 | 全部参数和输出属性 | 部分参数和属性 | 全部参数和属性 |
对普通用户来说,最省心的一点是:REST API 的 cmdlet 名称和参数与原来完全一致,你旧脚本里的Get-Mailbox、Set-TransportRule等命令基本无需改动,换个模块版本就能继续用。
快速上手:3 步完成 Exchange V3 模块迁移
第 1 步:安装或更新模块
从 PowerShell Gallery 安装最新版本的 ExchangeOnlineManagement 模块即可(Windows 上 REST API 连接还需要 PowerShellGet 与 PackageManagement 模块):
Install-Module -Name ExchangeOnlineManagement第 2 步:使用现代身份验证连接
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com弹出登录窗口输入密码(启用 MFA 的账户完成多因素验证)即可完成连接,全程不需要再折腾 WinRM 配置。
第 3 步:确认连接类型
REST API 连接不会出现在传统的Get-PSSession里,应改用模块自带的Get-ConnectionInformationcmdlet 查看:
Get-ConnectionInformation看到返回的连接信息对象,就说明你已经跑在 REST API 通道上了。完整的连接细节可参考官方文档 connect-to-exchange-online-powershell.md。
迁移后必知的 4 个坑
1. Invoke-Command 不再工作
很多老脚本习惯用Invoke-Command -Session $Session -ScriptBlock {...}指定远程会话执行命令,它在 REST API 连接中完全不可用。好消息是多数场景可以简化为直接运行 cmdlet,官方文档按场景给出了完整的替代写法,见 invoke-command-workarounds-rest-api.md。
2. 多连接管理换一套命令
同一窗口开多个连接时,以前靠Get-PSSession区分,现在改用Connect-ExchangeOnline的Prefix参数(如-Prefix C1、-Prefix C2),再配合Get-ConnectionInformation筛选,即可分别操作不同连接。
3. 批量操作注意 15 分钟超时
REST API 命令有 15 分钟超时限制。例如一次性向万人邮件组更新成员可能超时,建议拆成Update-DistributionGroupMember处理前 5000 个、再用循环逐个Add-DistributionGroupMember补齐剩余成员。
4. 善用 Get-EXO* 加速命令
模块内置 9 个Get-EXO*专属 cmdlet(如 Get-EXOMailbox、Get-EXORecipient),配合PropertySets属性集按需取数,在批量拉取成千上万条数据时速度优势明显,详见 cmdlet-property-sets.md 与 filters-v2.md。
免密码自动化:App-only 认证与托管标识
REST API 连接还解锁了一个老方案做不到的能力——无值守脚本安全运行。过去后台任务只能把账号密码存本地,风险极高;现在有两种推荐做法:
- App-only 认证(证书认证):在 Microsoft Entra 中注册应用、上传证书并分配目录角色,脚本即可用证书令牌静默连接,全程无需人工登录。
- Azure 托管标识:脚本跑在 Azure 自动化账户或 VM 上时,直接
Connect-ExchangeOnline -ManagedIdentity -Organization yourdomain.onmicrosoft.com,连证书都不用管理。
注册应用的操作界面如下(Exchange Online PowerShell REST API 迁移中的 App-only 认证配置):
证书上传成功后,界面会显示绿色对勾确认(Exchange V3 模块证书认证配置完成):
最后一步,把应用分配到对应的管理员角色,认证通过后 cmdlet 权限即按 RBAC 生效(Remote PowerShell 到 REST API 迁移后的角色分配):
若在 Azure 自动化中使用托管标识,可先记下自动化账户的资源 ID,供后续配置授权参考(Azure 托管标识连接 Exchange PowerShell 的入口):
完整的配置步骤分别见 app-only-auth-powershell-v2.md 和 connect-exo-powershell-managed-identity.md。
延伸阅读:去哪看完整官方文档
本文所有结论均出自本仓库的官方文档,核心文件路径如下:
- V3 模块总览与 REST API 连接详解:exchange-online-powershell-v2.md
- 版本更新日志(各版本新增能力一览):whats-new-in-the-exo-module.md
- 连接操作指南:connect-to-exchange-online-powershell.md
- 连接与认证 cmdlet 参考:Connect-ExchangeOnline.md、Get-ConnectionInformation.md
如需查阅全部文档源码,可以克隆本仓库:
git clone https://gitcode.com/gh_mirrors/of/office-docs-powershell概念性文档集中在 exchange/docs-conceptual/ 目录,各 cmdlet 的参数级参考文档在 exchange/exchange-ps/exchange/ 目录,迁移遇到问题时按图索骥即可。
【免费下载链接】office-docs-powershellPowerShell Reference for Office Products - Short URL: aka.ms/office-powershell项目地址: https://gitcode.com/gh_mirrors/of/office-docs-powershell
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
